Tiberiu Chibici
913e65b856
==================================================== + Changed 'align 0x4' line above multiboot header in loader.asm to 'align 4' + Removed -e option for echo in build.sh + Modified build.sh for linux + Fixed triple fault when enabling paging + Fixed page faults at memory manager initialization + Fixed 'mem' console function + Added more info about page fault at crash screen + Added Panic() macro + Added verbose mode for memory manager [ BAD] BUILD 0.1.0.390 DATE 8/27/2011 AT 10:54 PM ==================================================== + Added stdlib routines, separated in different files + Rewritten physical memory manager + Added virtual mem manager + Added memory allocation/freeing + Added memory library + Added temporary allocation (at end of kernel), until paging is started - Removed functionality from debug console function 'mem' - Removed system.h, the one remaining function now in stdio.h
120 lines
3.0 KiB
C
120 lines
3.0 KiB
C
/*
|
|
* multiboot.h
|
|
*
|
|
* Created on: Aug 17, 2011
|
|
* Author: Tiberiu
|
|
*/
|
|
|
|
#ifndef MULTIBOOT_H_
|
|
#define MULTIBOOT_H_
|
|
|
|
#include <types.h>
|
|
|
|
// Flags to be set in the 'flags' member of the multiboot info structure.
|
|
#define MultibootInfo_MEMORY 0x00000001 // is there basic lower/upper memory information?
|
|
#define MultibootInfo_BOOTDEV 0x00000002 // is there a boot device set?
|
|
#define MultibootInfo_CMDLINE 0x00000004 // is the command-line defined?
|
|
#define MultibootInfo_MODS 0x00000008 // are there modules to do something with?
|
|
|
|
// These next two are mutually exclusive
|
|
#define MultibootInfo_AOUT_SYMS 0x00000010 // is there a symbol table loaded?
|
|
#define MultibootInfo_ELF_SHDR 0X00000020 // is there an ELF section header table?
|
|
|
|
|
|
#define MultibootInfo_MEM_MAP 0x00000040 // is there a full memory map?
|
|
#define MultibootInfo_DRIVE_INFO 0x00000080 // Is there drive info?
|
|
#define MultibootInfo_CONFIG_TABLE 0x00000100 // Is there a config table?
|
|
#define MultibootInfo_BOOT_LOADER_NAME 0x00000200 // Is there a boot loader name?
|
|
#define MultibootInfo_APM_TABLE 0x00000400 // Is there a APM table?
|
|
#define MultibootInfo_VIDEO_INFO 0x00000800 // Is there video information?
|
|
|
|
|
|
// The symbol table for a.out.
|
|
typedef struct
|
|
{
|
|
uint32 TableSize;
|
|
uint32 StrSize;
|
|
uint32 Address;
|
|
uint32 Reserved;
|
|
} MultibootAoutSymbolTable;
|
|
|
|
|
|
// The section header table for ELF.
|
|
typedef struct
|
|
{
|
|
uint32 Number;
|
|
uint32 Size;
|
|
uint32 Address;
|
|
uint32 Shndx;
|
|
} MultibootElfSectionHeaderTable;
|
|
|
|
|
|
typedef struct
|
|
{
|
|
uint32 Flags; // Multiboot info version number
|
|
|
|
uint32 MemoryLower; // Available memory from BIOS
|
|
uint32 MemoryUpper;
|
|
|
|
uint32 BootDevice; // "root" partition
|
|
|
|
uint32 CommandLine; // Kernel command line
|
|
|
|
uint32 ModulesCount; // Boot-Module list
|
|
uint32 ModulesAddress;
|
|
|
|
union
|
|
{
|
|
MultibootAoutSymbolTable AoutSymbols;
|
|
MultibootElfSectionHeaderTable ElfSectionHeaderTable;
|
|
} Symbols;
|
|
|
|
uint32 MemoryMapLength; // Memory Mapping buffer
|
|
uint32 MemoryMapAddress;
|
|
|
|
uint32 DrivesLength; // Drive Info buffer
|
|
uint32 DrivesAddress;
|
|
|
|
uint32 ConfigurationTable; // ROM configuration table
|
|
|
|
uint32 BootLoaderName; // Boot Loader Name
|
|
|
|
uint32 ApmTable; // APM table
|
|
|
|
uint32 VbeControlInfo; // Video
|
|
uint32 VbeModeInfo;
|
|
uint16 VbeMode;
|
|
uint16 VbeInterfaceSegment;
|
|
uint16 VbeInterfaceOffset;
|
|
uint16 VbeInterfaceLength;
|
|
} MultibootInfo;
|
|
|
|
|
|
typedef struct
|
|
{
|
|
uint32 Size;
|
|
uint64 Address;
|
|
uint64 Length;
|
|
|
|
#define MULTIBOOT_MEMORY_AVAILABLE 1
|
|
#define MULTIBOOT_MEMORY_RESERVED 2
|
|
|
|
uint32 Type;
|
|
} __attribute__((packed)) MultibootMemoryMapEntry;
|
|
|
|
typedef struct
|
|
{
|
|
// the memory used goes from bytes 'mod_start' to 'mod_end-1' inclusive
|
|
uint32 ModuleStart;
|
|
uint32 ModuleEnd;
|
|
|
|
// Module command line
|
|
uint32 CommandLine;
|
|
|
|
// padding to take it to 16 bytes (must be zero)
|
|
uint32 _Padding;
|
|
} MultibootModule;
|
|
|
|
|
|
#endif
|