1*d1f3a23bSKevin Wolf /* 2*d1f3a23bSKevin Wolf * Copyright (c) 2013 Kevin Wolf <kwolf@redhat.com> 3*d1f3a23bSKevin Wolf * 4*d1f3a23bSKevin Wolf * Permission is hereby granted, free of charge, to any person obtaining a copy 5*d1f3a23bSKevin Wolf * of this software and associated documentation files (the "Software"), to deal 6*d1f3a23bSKevin Wolf * in the Software without restriction, including without limitation the rights 7*d1f3a23bSKevin Wolf * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8*d1f3a23bSKevin Wolf * copies of the Software, and to permit persons to whom the Software is 9*d1f3a23bSKevin Wolf * furnished to do so, subject to the following conditions: 10*d1f3a23bSKevin Wolf * 11*d1f3a23bSKevin Wolf * The above copyright notice and this permission notice shall be included in 12*d1f3a23bSKevin Wolf * all copies or substantial portions of the Software. 13*d1f3a23bSKevin Wolf * 14*d1f3a23bSKevin Wolf * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15*d1f3a23bSKevin Wolf * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16*d1f3a23bSKevin Wolf * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 17*d1f3a23bSKevin Wolf * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18*d1f3a23bSKevin Wolf * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19*d1f3a23bSKevin Wolf * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 20*d1f3a23bSKevin Wolf * THE SOFTWARE. 21*d1f3a23bSKevin Wolf */ 22*d1f3a23bSKevin Wolf 23*d1f3a23bSKevin Wolf #include "libc.h" 24*d1f3a23bSKevin Wolf #include "multiboot.h" 25*d1f3a23bSKevin Wolf 26*d1f3a23bSKevin Wolf int test_main(uint32_t magic, struct mb_info *mbi) 27*d1f3a23bSKevin Wolf { 28*d1f3a23bSKevin Wolf uintptr_t entry_addr; 29*d1f3a23bSKevin Wolf struct mb_mmap_entry *entry; 30*d1f3a23bSKevin Wolf 31*d1f3a23bSKevin Wolf (void) magic; 32*d1f3a23bSKevin Wolf 33*d1f3a23bSKevin Wolf printf("Lower memory: %dk\n", mbi->mem_lower); 34*d1f3a23bSKevin Wolf printf("Upper memory: %dk\n", mbi->mem_upper); 35*d1f3a23bSKevin Wolf 36*d1f3a23bSKevin Wolf printf("\ne820 memory map:\n"); 37*d1f3a23bSKevin Wolf 38*d1f3a23bSKevin Wolf for (entry_addr = mbi->mmap_addr; 39*d1f3a23bSKevin Wolf entry_addr < mbi->mmap_addr + mbi->mmap_length; 40*d1f3a23bSKevin Wolf entry_addr += entry->size + 4) 41*d1f3a23bSKevin Wolf { 42*d1f3a23bSKevin Wolf entry = (struct mb_mmap_entry*) entry_addr; 43*d1f3a23bSKevin Wolf 44*d1f3a23bSKevin Wolf printf("%#llx - %#llx: type %d [entry size: %d]\n", 45*d1f3a23bSKevin Wolf entry->base_addr, 46*d1f3a23bSKevin Wolf entry->base_addr + entry->length, 47*d1f3a23bSKevin Wolf entry->type, 48*d1f3a23bSKevin Wolf entry->size); 49*d1f3a23bSKevin Wolf } 50*d1f3a23bSKevin Wolf 51*d1f3a23bSKevin Wolf printf("\nmmap start: %#x\n", mbi->mmap_addr); 52*d1f3a23bSKevin Wolf printf("mmap end: %#x\n", mbi->mmap_addr + mbi->mmap_length); 53*d1f3a23bSKevin Wolf printf("real mmap end: %#x\n", entry_addr); 54*d1f3a23bSKevin Wolf 55*d1f3a23bSKevin Wolf return 0; 56*d1f3a23bSKevin Wolf } 57