From: Ben Gras Date: Tue, 10 Dec 2013 21:47:53 +0000 (+0100) Subject: x86 multiboot.h X-Git-Tag: v3.3.0~455 X-Git-Url: http://zhaoyanbai.com/repos/man.delv.html?a=commitdiff_plain;h=be9fe09e97261d1fa8a4d71838e73facaf1e98ad;p=minix.git x86 multiboot.h Change-Id: I245564a98fb9e2572b88f8feb7411ad6800a543c --- diff --git a/include/arch/earm/include/multiboot.h b/include/arch/earm/include/multiboot.h index 19291b283..753d49365 100644 --- a/include/arch/earm/include/multiboot.h +++ b/include/arch/earm/include/multiboot.h @@ -292,7 +292,7 @@ struct multiboot_info /* Kernel command line */ u32_t cmdline; /* Boot-Module list */ - u32_t mods_count; + u32_t mi_mods_count; u32_t mods_addr; union { @@ -338,8 +338,8 @@ typedef struct multiboot_mod_list multiboot_module_t; struct multiboot_mmap_entry { u32_t size; - u64_t addr; - u64_t len; + u64_t mm_base_addr; + u64_t mm_length; #define MULTIBOOT_MEMORY_AVAILABLE 1 #define MULTIBOOT_MEMORY_RESERVED 2 u32_t type; diff --git a/include/minix/type.h b/include/minix/type.h index 25b24d2c3..88cb3d705 100644 --- a/include/minix/type.h +++ b/include/minix/type.h @@ -1,12 +1,14 @@ #ifndef _TYPE_H #define _TYPE_H + +#include + #include #ifndef _MINIX_SYS_CONFIG_H #include #endif -#include #include #include diff --git a/kernel/arch/earm/pg_utils.c b/kernel/arch/earm/pg_utils.c index 84cef7ed2..fe4c24d33 100644 --- a/kernel/arch/earm/pg_utils.c +++ b/kernel/arch/earm/pg_utils.c @@ -26,7 +26,7 @@ void print_memmap(kinfo_t *cbi) int m; assert(cbi->mmap_size < MAXMEMMAP); for(m = 0; m < cbi->mmap_size; m++) { - phys_bytes addr = cbi->memmap[m].addr, endit = cbi->memmap[m].addr + cbi->memmap[m].len; + phys_bytes addr = cbi->memmap[m].mm_base_addr, endit = cbi->memmap[m].mm_base_addr + cbi->memmap[m].mm_length; printf("%08lx-%08lx ",addr, endit); } printf("\nsize %08lx\n", cbi->mmap_size); @@ -46,8 +46,8 @@ void cut_memmap(kinfo_t *cbi, phys_bytes start, phys_bytes end) for(m = 0; m < cbi->mmap_size; m++) { phys_bytes substart = start, subend = end; - phys_bytes memaddr = cbi->memmap[m].addr, - memend = cbi->memmap[m].addr + cbi->memmap[m].len; + phys_bytes memaddr = cbi->memmap[m].mm_base_addr, + memend = cbi->memmap[m].mm_base_addr + cbi->memmap[m].mm_length; /* adjust cut range to be a subset of the free memory */ if(substart < memaddr) substart = memaddr; @@ -57,7 +57,7 @@ void cut_memmap(kinfo_t *cbi, phys_bytes start, phys_bytes end) /* if there is any overlap, forget this one and add * 1-2 subranges back */ - cbi->memmap[m].addr = cbi->memmap[m].len = 0; + cbi->memmap[m].mm_base_addr = cbi->memmap[m].mm_length = 0; if(substart > memaddr) add_memmap(cbi, memaddr, substart-memaddr); if(subend < memend) @@ -91,11 +91,11 @@ void add_memmap(kinfo_t *cbi, u64_t addr, u64_t len) for(m = 0; m < MAXMEMMAP; m++) { phys_bytes highmark; - if(cbi->memmap[m].len) { + if(cbi->memmap[m].mm_length) { continue; } - cbi->memmap[m].addr = addr; - cbi->memmap[m].len = len; + cbi->memmap[m].mm_base_addr = addr; + cbi->memmap[m].mm_length = len; cbi->memmap[m].type = MULTIBOOT_MEMORY_AVAILABLE; if(m >= cbi->mmap_size) { cbi->mmap_size = m+1; @@ -136,16 +136,16 @@ phys_bytes pg_alloc_page(kinfo_t *cbi) for(m = 0; m < cbi->mmap_size; m++) { mmap = &cbi->memmap[m]; - if(!mmap->len) { + if(!mmap->mm_length) { continue; } - assert(mmap->len > 0); - assert(!(mmap->len % ARM_PAGE_SIZE)); - assert(!(mmap->addr % ARM_PAGE_SIZE)); + assert(mmap->mm_length > 0); + assert(!(mmap->mm_length % ARM_PAGE_SIZE)); + assert(!(mmap->mm_base_addr % ARM_PAGE_SIZE)); - u32_t addr = mmap->addr; - mmap->addr += ARM_PAGE_SIZE; - mmap->len -= ARM_PAGE_SIZE; + u32_t addr = mmap->mm_base_addr; + mmap->mm_base_addr += ARM_PAGE_SIZE; + mmap->mm_length -= ARM_PAGE_SIZE; cbi->kernel_allocated_bytes_dynamic += ARM_PAGE_SIZE; diff --git a/kernel/arch/earm/pre_init.c b/kernel/arch/earm/pre_init.c index 1c8646761..49186c26b 100644 --- a/kernel/arch/earm/pre_init.c +++ b/kernel/arch/earm/pre_init.c @@ -187,7 +187,7 @@ void setup_mbi(multiboot_info_t *mbi, char *bootargs) memset(mbi, 0, sizeof(*mbi)); mbi->flags = MULTIBOOT_INFO_MODS | MULTIBOOT_INFO_MEM_MAP | MULTIBOOT_INFO_CMDLINE; - mbi->mods_count = MB_MODS_NR; + mbi->mi_mods_count = MB_MODS_NR; mbi->mods_addr = (u32_t)&mb_modlist; int i; @@ -205,8 +205,8 @@ void setup_mbi(multiboot_info_t *mbi, char *bootargs) mbi->mmap_length = sizeof(mb_memmap); mb_memmap.size = sizeof(multiboot_memory_map_t); - mb_memmap.addr = MB_MMAP_START; - mb_memmap.len = MB_MMAP_SIZE; + mb_memmap.mm_base_addr = MB_MMAP_START; + mb_memmap.mm_length = MB_MMAP_SIZE; mb_memmap.type = MULTIBOOT_MEMORY_AVAILABLE; } @@ -286,10 +286,10 @@ void get_parameters(kinfo_t *cbi, char *bootargs) assert(!(cbi->bootstrap_start % ARM_PAGE_SIZE)); cbi->bootstrap_len = rounddown(cbi->bootstrap_len, ARM_PAGE_SIZE); assert(mbi->flags & MULTIBOOT_INFO_MODS); - assert(mbi->mods_count < MULTIBOOT_MAX_MODS); - assert(mbi->mods_count > 0); + assert(mbi->mi_mods_count < MULTIBOOT_MAX_MODS); + assert(mbi->mi_mods_count > 0); memcpy(&cbi->module_list, (void *) mbi->mods_addr, - mbi->mods_count * sizeof(multiboot_module_t)); + mbi->mi_mods_count * sizeof(multiboot_module_t)); memset(cbi->memmap, 0, sizeof(cbi->memmap)); /* mem_map has a variable layout */ @@ -300,7 +300,7 @@ void get_parameters(kinfo_t *cbi, char *bootargs) mmap = (multiboot_memory_map_t *) ((unsigned long) mmap + mmap->size + sizeof(mmap->size))) { if(mmap->type != MULTIBOOT_MEMORY_AVAILABLE) continue; - add_memmap(cbi, mmap->addr, mmap->len); + add_memmap(cbi, mmap->mm_base_addr, mmap->mm_length); } } else { assert(mbi->flags & MULTIBOOT_INFO_MEMORY); @@ -312,11 +312,11 @@ void get_parameters(kinfo_t *cbi, char *bootargs) * with each other. Pretend the kernel is an extra module for a * second. */ - k = mbi->mods_count; + k = mbi->mi_mods_count; assert(k < MULTIBOOT_MAX_MODS); cbi->module_list[k].mod_start = kernbase; cbi->module_list[k].mod_end = kernbase + kernsize; - cbi->mods_with_kernel = mbi->mods_count+1; + cbi->mods_with_kernel = mbi->mi_mods_count+1; cbi->kern_mod = k; for(m = 0; m < cbi->mods_with_kernel; m++) { diff --git a/kernel/arch/earm/protect.c b/kernel/arch/earm/protect.c index 2db24007c..b63b09ae3 100644 --- a/kernel/arch/earm/protect.c +++ b/kernel/arch/earm/protect.c @@ -64,7 +64,7 @@ multiboot_module_t *bootmod(int pnr) p = i - NR_TASKS; if(image[i].proc_nr == pnr) { assert(p < MULTIBOOT_MAX_MODS); - assert(p < kinfo.mbi.mods_count); + assert(p < kinfo.mbi.mi_mods_count); return &kinfo.module_list[p]; } } diff --git a/kernel/arch/i386/head.S b/kernel/arch/i386/head.S index 63fafdc37..908906ad8 100644 --- a/kernel/arch/i386/head.S +++ b/kernel/arch/i386/head.S @@ -42,7 +42,7 @@ MINIX: .balign 8 -#define MULTIBOOT_FLAGS (MULTIBOOT_MEMORY_INFO | MULTIBOOT_PAGE_ALIGN) +#define MULTIBOOT_FLAGS (MULTIBOOT_HEADER_WANT_MEMORY | MULTIBOOT_HEADER_MODS_ALIGNED) multiboot_magic: .long MULTIBOOT_HEADER_MAGIC diff --git a/kernel/arch/i386/pg_utils.c b/kernel/arch/i386/pg_utils.c index 91e4fab7a..065d44575 100644 --- a/kernel/arch/i386/pg_utils.c +++ b/kernel/arch/i386/pg_utils.c @@ -23,7 +23,7 @@ void print_memmap(kinfo_t *cbi) int m; assert(cbi->mmap_size < MAXMEMMAP); for(m = 0; m < cbi->mmap_size; m++) { - phys_bytes addr = cbi->memmap[m].addr, endit = cbi->memmap[m].addr + cbi->memmap[m].len; + phys_bytes addr = cbi->memmap[m].mm_base_addr, endit = cbi->memmap[m].mm_base_addr + cbi->memmap[m].mm_length; printf("%08lx-%08lx ",addr, endit); } printf("\nsize %08lx\n", cbi->mmap_size); @@ -43,8 +43,8 @@ void cut_memmap(kinfo_t *cbi, phys_bytes start, phys_bytes end) for(m = 0; m < cbi->mmap_size; m++) { phys_bytes substart = start, subend = end; - phys_bytes memaddr = cbi->memmap[m].addr, - memend = cbi->memmap[m].addr + cbi->memmap[m].len; + phys_bytes memaddr = cbi->memmap[m].mm_base_addr, + memend = cbi->memmap[m].mm_base_addr + cbi->memmap[m].mm_length; /* adjust cut range to be a subset of the free memory */ if(substart < memaddr) substart = memaddr; @@ -54,7 +54,7 @@ void cut_memmap(kinfo_t *cbi, phys_bytes start, phys_bytes end) /* if there is any overlap, forget this one and add * 1-2 subranges back */ - cbi->memmap[m].addr = cbi->memmap[m].len = 0; + cbi->memmap[m].mm_base_addr = cbi->memmap[m].mm_length = 0; if(substart > memaddr) add_memmap(cbi, memaddr, substart-memaddr); if(subend < memend) @@ -74,8 +74,8 @@ phys_bytes alloc_lowest(kinfo_t *cbi, phys_bytes len) assert(kernel_may_alloc); for(m = 0; m < cbi->mmap_size; m++) { - if(cbi->memmap[m].len < len) continue; - if(cbi->memmap[m].addr < lowest) lowest = cbi->memmap[m].addr; + if(cbi->memmap[m].mm_length < len) continue; + if(cbi->memmap[m].mm_base_addr < lowest) lowest = cbi->memmap[m].mm_base_addr; } assert(lowest != EMPTY); cut_memmap(cbi, lowest, len); @@ -103,10 +103,10 @@ void add_memmap(kinfo_t *cbi, u64_t addr, u64_t len) for(m = 0; m < MAXMEMMAP; m++) { phys_bytes highmark; - if(cbi->memmap[m].len) continue; - cbi->memmap[m].addr = addr; - cbi->memmap[m].len = len; - cbi->memmap[m].type = MULTIBOOT_MEMORY_AVAILABLE; + if(cbi->memmap[m].mm_length) continue; + cbi->memmap[m].mm_base_addr = addr; + cbi->memmap[m].mm_length = len; + cbi->memmap[m].mm_type = MULTIBOOT_MEMORY_AVAILABLE; if(m >= cbi->mmap_size) cbi->mmap_size = m+1; highmark = addr + len; @@ -144,16 +144,16 @@ phys_bytes pg_alloc_page(kinfo_t *cbi) for(m = cbi->mmap_size-1; m >= 0; m--) { mmap = &cbi->memmap[m]; - if(!mmap->len) continue; - assert(mmap->len > 0); - assert(!(mmap->len % I386_PAGE_SIZE)); - assert(!(mmap->addr % I386_PAGE_SIZE)); + if(!mmap->mm_length) continue; + assert(mmap->mm_length > 0); + assert(!(mmap->mm_length % I386_PAGE_SIZE)); + assert(!(mmap->mm_base_addr % I386_PAGE_SIZE)); - mmap->len -= I386_PAGE_SIZE; + mmap->mm_length -= I386_PAGE_SIZE; cbi->kernel_allocated_bytes_dynamic += I386_PAGE_SIZE; - return mmap->addr + mmap->len; + return mmap->mm_base_addr + mmap->mm_length; } panic("can't find free memory"); diff --git a/kernel/arch/i386/pre_init.c b/kernel/arch/i386/pre_init.c index 05801f2be..5f50d29e9 100644 --- a/kernel/arch/i386/pre_init.c +++ b/kernel/arch/i386/pre_init.c @@ -129,12 +129,12 @@ void get_parameters(u32_t ebx, kinfo_t *cbi) cbi->serial_debug_baud = 115200; /* parse boot command line */ - if (mbi->flags&MULTIBOOT_INFO_CMDLINE) { + if (mbi->mi_flags & MULTIBOOT_INFO_HAS_CMDLINE) { static char var[BUF]; static char value[BUF]; /* Override values with cmdline argument */ - memcpy(cmdline, (void *) mbi->cmdline, BUF); + memcpy(cmdline, (void *) mbi->mi_cmdline, BUF); p = cmdline; while (*p) { var_i = 0; @@ -172,38 +172,38 @@ void get_parameters(u32_t ebx, kinfo_t *cbi) assert(!(cbi->bootstrap_start % I386_PAGE_SIZE)); cbi->bootstrap_len = rounddown(cbi->bootstrap_len, I386_PAGE_SIZE); - assert(mbi->flags & MULTIBOOT_INFO_MODS); - assert(mbi->mods_count < MULTIBOOT_MAX_MODS); - assert(mbi->mods_count > 0); - memcpy(&cbi->module_list, (void *) mbi->mods_addr, - mbi->mods_count * sizeof(multiboot_module_t)); + assert(mbi->mi_flags & MULTIBOOT_INFO_HAS_MODS); + assert(mbi->mi_mods_count < MULTIBOOT_MAX_MODS); + assert(mbi->mi_mods_count > 0); + memcpy(&cbi->module_list, (void *) mbi->mi_mods_addr, + mbi->mi_mods_count * sizeof(multiboot_module_t)); memset(cbi->memmap, 0, sizeof(cbi->memmap)); /* mem_map has a variable layout */ - if(mbi->flags & MULTIBOOT_INFO_MEM_MAP) { + if(mbi->mi_flags & MULTIBOOT_INFO_HAS_MMAP) { cbi->mmap_size = 0; for (mmap = (multiboot_memory_map_t *) mbi->mmap_addr; (unsigned long) mmap < mbi->mmap_addr + mbi->mmap_length; mmap = (multiboot_memory_map_t *) - ((unsigned long) mmap + mmap->size + sizeof(mmap->size))) { - if(mmap->type != MULTIBOOT_MEMORY_AVAILABLE) continue; - add_memmap(cbi, mmap->addr, mmap->len); + ((unsigned long) mmap + mmap->mm_size + sizeof(mmap->mm_size))) { + if(mmap->mm_type != MULTIBOOT_MEMORY_AVAILABLE) continue; + add_memmap(cbi, mmap->mm_base_addr, mmap->mm_length); } } else { - assert(mbi->flags & MULTIBOOT_INFO_MEMORY); - add_memmap(cbi, 0, mbi->mem_lower_unused*1024); - add_memmap(cbi, 0x100000, mbi->mem_upper_unused*1024); + assert(mbi->mi_flags & MULTIBOOT_INFO_HAS_MEMORY); + add_memmap(cbi, 0, mbi->mi_mem_lower*1024); + add_memmap(cbi, 0x100000, mbi->mi_mem_upper*1024); } /* Sanity check: the kernel nor any of the modules may overlap * with each other. Pretend the kernel is an extra module for a * second. */ - k = mbi->mods_count; + k = mbi->mi_mods_count; assert(k < MULTIBOOT_MAX_MODS); cbi->module_list[k].mod_start = kernbase; cbi->module_list[k].mod_end = kernbase + kernsize; - cbi->mods_with_kernel = mbi->mods_count+1; + cbi->mods_with_kernel = mbi->mi_mods_count+1; cbi->kern_mod = k; for(m = 0; m < cbi->mods_with_kernel; m++) { @@ -229,7 +229,7 @@ kinfo_t *pre_init(u32_t magic, u32_t ebx) */ get_parameters(ebx, &kinfo); - assert(magic == MULTIBOOT_BOOTLOADER_MAGIC); + assert(magic == MULTIBOOT_INFO_MAGIC); /* Make and load a pagetable that will map the kernel * to where it should be; but first a 1:1 mapping so diff --git a/kernel/arch/i386/protect.c b/kernel/arch/i386/protect.c index 5baf44f83..e75022de1 100644 --- a/kernel/arch/i386/protect.c +++ b/kernel/arch/i386/protect.c @@ -7,6 +7,7 @@ #include #include +#include #include #include "kernel/kernel.h" @@ -286,7 +287,7 @@ multiboot_module_t *bootmod(int pnr) p = i - NR_TASKS; if(image[i].proc_nr == pnr) { assert(p < MULTIBOOT_MAX_MODS); - assert(p < kinfo.mbi.mods_count); + assert(p < kinfo.mbi.mi_mods_count); return &kinfo.module_list[p]; } } diff --git a/kernel/main.c b/kernel/main.c index 6665894fd..8670ba530 100644 --- a/kernel/main.c +++ b/kernel/main.c @@ -152,9 +152,9 @@ void kmain(kinfo_t *local_cbi) proc_init(); - if(NR_BOOT_MODULES != kinfo.mbi.mods_count) + if(NR_BOOT_MODULES != kinfo.mbi.mi_mods_count) panic("expecting %d boot processes/modules, found %d", - NR_BOOT_MODULES, kinfo.mbi.mods_count); + NR_BOOT_MODULES, kinfo.mbi.mi_mods_count); /* Set up proc table entries for processes in boot image. */ for (i=0; i < NR_BOOT_PROCS; ++i) { diff --git a/servers/vm/utility.c b/servers/vm/utility.c index b2f4358ae..c59462d49 100644 --- a/servers/vm/utility.c +++ b/servers/vm/utility.c @@ -58,8 +58,8 @@ struct memory *mem_chunks) /* store mem chunks here */ /* Obtain and parse memory from kernel environment. */ /* XXX Any memory chunk in excess of NR_MEMS is silently ignored. */ for(i = 0; i < MIN(MAXMEMMAP, NR_MEMS); i++) { - mem_chunks[i].base = kernel_boot_info.memmap[i].addr; - mem_chunks[i].size = kernel_boot_info.memmap[i].len; + mem_chunks[i].base = kernel_boot_info.memmap[i].mm_base_addr; + mem_chunks[i].size = kernel_boot_info.memmap[i].mm_length; } /* Round physical memory to clicks. Round start up, round end down. */ diff --git a/sys/arch/i386/include/multiboot.h b/sys/arch/i386/include/multiboot.h index 19291b283..d96e0aef8 100644 --- a/sys/arch/i386/include/multiboot.h +++ b/sys/arch/i386/include/multiboot.h @@ -1,3 +1,6 @@ +#ifndef _MACHINE_MULTIBOOT_H +#define _MACHINE_MULTIBOOT_H 1 + /* $NetBSD: multiboot.h,v 1.8 2009/02/22 18:05:42 ahoka Exp $ */ /*- @@ -28,10 +31,6 @@ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ -#ifndef __MULTIBOOT_H__ -#define __MULTIBOOT_H__ - -#if !defined(_KERNEL) && defined(_STANDALONE) /* --------------------------------------------------------------------- */ @@ -44,6 +43,8 @@ #define MULTIBOOT_HEADER_HAS_VBE 0x00000004 #define MULTIBOOT_HEADER_HAS_ADDR 0x00010000 +#ifndef __ASSEMBLY__ + #if !defined(_LOCORE) struct multiboot_header { uint32_t mh_magic; @@ -72,6 +73,8 @@ struct multiboot_header { extern struct multiboot_header *Multiboot_Header; #endif /* !defined(_LOCORE) && defined(_KERNEL) */ +#endif /* __ASSEMBLY__ */ + /* --------------------------------------------------------------------- */ /* @@ -91,6 +94,8 @@ extern struct multiboot_header *Multiboot_Header; #define MULTIBOOT_INFO_HAS_APM_TABLE 0x00000400 #define MULTIBOOT_INFO_HAS_VBE 0x00000800 +#ifndef __ASSEMBLY__ + #if !defined(_LOCORE) struct multiboot_info { uint32_t mi_flags; @@ -190,162 +195,52 @@ struct multiboot_module { uint32_t mmo_reserved; }; -#endif /* !defined(_LOCORE) */ +#endif -/* --------------------------------------------------------------------- */ +#endif /* __ASSEMBLY__ */ -/* - * Prototypes for public functions defined in multiboot.c. - */ -#if !defined(_LOCORE) && defined(_KERNEL) -void multiboot_pre_reloc(struct multiboot_info *); -void multiboot_post_reloc(void); -void multiboot_print_info(void); -bool multiboot_ksyms_addsyms_elf(void); -#endif /* !defined(_LOCORE) */ +#ifdef __minix -/* --------------------------------------------------------------------- */ -#else /* !defined(_KERNEL) && defined(_STANDALONE) */ -/* LSC FIXME: OLD MINIX DEFINITION: should be removed and replace with - definition above... */ -#define MULTIBOOT_HEADER_MAGIC 0x1BADB002 +#ifndef __ASSEMBLY__ +typedef struct multiboot_info multiboot_info_t; +typedef struct multiboot_module multiboot_module_t; +typedef struct multiboot_mmap multiboot_memory_map_t; +#endif -#define MULTIBOOT_BOOTLOADER_MAGIC 0x2BADB002 +#define MULTIBOOT_MEMORY_AVAILABLE 1 +#define MULTIBOOT_MAX_MODS 20 -/* Must pass memory information to OS. */ -#define MULTIBOOT_PAGE_ALIGN 0x00000001 +#define mod_start mmo_start +#define mod_end mmo_end -#define MULTIBOOT_MEMORY_INFO 0x00000002 +#define mmap_addr mi_mmap_addr +#define mmap_length mi_mmap_length #define MULTIBOOT_VIDEO_MODE 0x00000004 - -#define MULTIBOOT_AOUT_KLUDGE 0x00010000 - -/* consts used for Multiboot pre-init */ - #define MULTIBOOT_VIDEO_MODE_EGA 1 - #define MULTIBOOT_VIDEO_BUFFER 0xB8000 -/* Usable lower memory chunk has a upper bound */ -#define MULTIBOOT_LOWER_MEM_MAX 0x7f800 - #define MULTIBOOT_CONSOLE_LINES 25 #define MULTIBOOT_CONSOLE_COLS 80 -#define MULTIBOOT_VIDEO_BUFFER_BYTES \ - (MULTIBOOT_CONSOLE_LINES*MULTIBOOT_CONSOLE_COLS*2) - -#define MULTIBOOT_STACK_SIZE 4096 -#define MULTIBOOT_PARAM_BUF_SIZE 1024 - -#define MULTIBOOT_MAX_MODS 20 - -/* Flags to be set in the ’flags’ member of the multiboot info structure. */ - -#define MULTIBOOT_INFO_MEMORY 0x00000001 -#define MULTIBOOT_INFO_MEM_MAP 0x00000040 - -/* Is there a boot device set? */ -#define MULTIBOOT_INFO_BOOTDEV 0x00000002 - -/* Is the command-line defined? */ -#define MULTIBOOT_INFO_CMDLINE 0x00000004 - -/* Are there modules to do something with? */ -#define MULTIBOOT_INFO_MODS 0x00000008 - -#define MULTIBOOT_HIGH_MEM_BASE 0x100000 +#endif -#ifndef __ASSEMBLY__ - -#include -/* The symbol table for a.out. */ -struct multiboot_aout_symbol_table -{ - u32_t tabsize; - u32_t strsize; - u32_t addr; - u32_t reserved; -}; -/* The section header table for ELF. */ -struct multiboot_elf_section_header_table -{ - u32_t num; - u32_t size; - u32_t addr; - u32_t shndx; -}; +/* --------------------------------------------------------------------- */ -typedef struct multiboot_elf_section_header_table multiboot_elf_section_header_table_t; -typedef struct multiboot_aout_symbol_table multiboot_aout_symbol_table_t; - -struct multiboot_info -{ - /* Multiboot info version number */ - u32_t flags; - /* Available memory from BIOS */ - u32_t mem_lower_unused; /* minix uses memmap instead */ - u32_t mem_upper_unused; - /* "root" partition */ - u32_t boot_device; - /* Kernel command line */ - u32_t cmdline; - /* Boot-Module list */ - u32_t mods_count; - u32_t mods_addr; - union - { - multiboot_aout_symbol_table_t aout_sym; - multiboot_elf_section_header_table_t elf_sec; - } u; - /* Memory Mapping buffer */ - u32_t mmap_length; - u32_t mmap_addr; - /* Drive Info buffer */ - u32_t drives_length; - u32_t drives_addr; - /* ROM configuration table */ - u32_t config_table; - /* Boot Loader Name */ - u32_t boot_loader_name; - /* APM table */ - u32_t apm_table; - /* Video */ - u32_t vbe_control_info; - u32_t vbe_mode_info; - u16_t vbe_mode; - u16_t vbe_interface_seg; - u16_t vbe_interface_off; - u16_t vbe_interface_len; -}; -typedef struct multiboot_info multiboot_info_t; +/* + * Prototypes for public functions defined in multiboot.c. + */ +#if !defined(_LOCORE) && defined(_KERNEL) +void multiboot_pre_reloc(struct multiboot_info *); +void multiboot_post_reloc(void); +void multiboot_print_info(void); +bool multiboot_ksyms_addsyms_elf(void); +#endif /* !defined(_LOCORE) */ -struct multiboot_mod_list -{ - /* Memory used goes from bytes 'mod_start' to 'mod_end-1' inclusive */ - u32_t mod_start; - u32_t mod_end; - /* Module command line */ - u32_t cmdline; - /* Pad struct to 16 bytes (must be zero) */ - u32_t pad; -}; -typedef struct multiboot_mod_list multiboot_module_t; +/* --------------------------------------------------------------------- */ -#define MULTIBOOT_MEMORY_AVAILABLE 1 -#define MULTIBOOT_MEMORY_RESERVED 2 -struct multiboot_mmap_entry -{ - u32_t size; - u64_t addr; - u64_t len; -#define MULTIBOOT_MEMORY_AVAILABLE 1 -#define MULTIBOOT_MEMORY_RESERVED 2 - u32_t type; -} __attribute__((packed)); -typedef struct multiboot_mmap_entry multiboot_memory_map_t; +#ifdef __minix +#define MULTIBOOT_PARAM_BUF_SIZE 1024 +#endif -#endif /* __ASSEMBLY__ */ -#endif /* !defined(_KERNEL) && defined(_STANDALONE) */ -#endif /* __MULTIBOOT_H__ */ +#endif