diff --git a/src/arch/i386/core/relocate.c b/src/arch/i386/core/relocate.c index e966bbea..47450e75 100644 --- a/src/arch/i386/core/relocate.c +++ b/src/arch/i386/core/relocate.c @@ -1,6 +1,5 @@ #include #include -#include /* * Originally by Eric Biederman diff --git a/src/arch/i386/firmware/pcbios/hidemem.c b/src/arch/i386/firmware/pcbios/hidemem.c index 322be9e4..cc5fc28f 100644 --- a/src/arch/i386/firmware/pcbios/hidemem.c +++ b/src/arch/i386/firmware/pcbios/hidemem.c @@ -23,7 +23,7 @@ FILE_LICENCE ( GPL2_OR_LATER ); #include #include #include -#include +#include #include /** Set to true if you want to test a fake E820 map */ diff --git a/src/arch/i386/firmware/pcbios/memmap.c b/src/arch/i386/firmware/pcbios/memmap.c index 8fa1f4c3..01080c7b 100644 --- a/src/arch/i386/firmware/pcbios/memmap.c +++ b/src/arch/i386/firmware/pcbios/memmap.c @@ -23,7 +23,7 @@ FILE_LICENCE ( GPL2_OR_LATER ); #include #include #include -#include +#include /** * @file @@ -282,7 +282,7 @@ static int meme820 ( struct memory_map *memmap ) { * * @v memmap Memory map to fill in */ -void get_memmap ( struct memory_map *memmap ) { +void x86_get_memmap ( struct memory_map *memmap ) { unsigned int basemem, extmem; int rc; @@ -310,3 +310,5 @@ void get_memmap ( struct memory_map *memmap ) { memmap->regions[1].end = 0x100000 + ( extmem * 1024 ); memmap->count = 2; } + +PROVIDE_IOAPI ( x86, get_memmap, x86_get_memmap ); diff --git a/src/arch/i386/image/com32.c b/src/arch/i386/image/com32.c index 381987ab..72e679f1 100644 --- a/src/arch/i386/image/com32.c +++ b/src/arch/i386/image/com32.c @@ -38,7 +38,7 @@ FILE_LICENCE ( GPL2_OR_LATER ); #include #include #include -#include +#include struct image_type com32_image_type __image_type ( PROBE_NORMAL ); diff --git a/src/arch/i386/image/multiboot.c b/src/arch/i386/image/multiboot.c index b3c6b8f7..e2075def 100644 --- a/src/arch/i386/image/multiboot.c +++ b/src/arch/i386/image/multiboot.c @@ -33,7 +33,7 @@ FILE_LICENCE ( GPL2_OR_LATER ); #include #include #include -#include +#include #include #include #include diff --git a/src/arch/i386/interface/pcbios/int13.c b/src/arch/i386/interface/pcbios/int13.c index a2cf5e6b..f72dc5fa 100644 --- a/src/arch/i386/interface/pcbios/int13.c +++ b/src/arch/i386/interface/pcbios/int13.c @@ -25,7 +25,7 @@ FILE_LICENCE ( GPL2_OR_LATER ); #include #include #include -#include +#include #include #include #include diff --git a/src/arch/i386/interface/pcbios/memtop_umalloc.c b/src/arch/i386/interface/pcbios/memtop_umalloc.c index 51240f2a..16736e19 100644 --- a/src/arch/i386/interface/pcbios/memtop_umalloc.c +++ b/src/arch/i386/interface/pcbios/memtop_umalloc.c @@ -29,7 +29,7 @@ FILE_LICENCE ( GPL2_OR_LATER ); #include #include #include -#include +#include #include /** Alignment of external allocated memory */ diff --git a/src/drivers/net/b44.c b/src/drivers/net/b44.c index 29aa5fa6..a104652c 100644 --- a/src/drivers/net/b44.c +++ b/src/drivers/net/b44.c @@ -43,7 +43,6 @@ FILE_LICENCE ( GPL2_OR_LATER ); #include #include #include -#include #include "b44.h" @@ -89,6 +88,8 @@ int phys_ram_within_limit(u64 limit) struct memory_region *highest = NULL; get_memmap(&memmap); + if (memmap.count == 0) + return 0; highest = &memmap.regions[memmap.count - 1]; return (highest->end < limit); diff --git a/src/image/segment.c b/src/image/segment.c index c3f0b8d5..97f6a995 100644 --- a/src/image/segment.c +++ b/src/image/segment.c @@ -27,7 +27,7 @@ FILE_LICENCE ( GPL2_OR_LATER ); #include #include -#include +#include #include #include diff --git a/src/include/ipxe/io.h b/src/include/ipxe/io.h index 5bfd8998..b4d88fe8 100644 --- a/src/include/ipxe/io.h +++ b/src/include/ipxe/io.h @@ -503,4 +503,30 @@ void mb ( void ); #define rmb() mb() #define wmb() mb() +/** A usable memory region */ +struct memory_region { + /** Physical start address */ + uint64_t start; + /** Physical end address */ + uint64_t end; +}; + +/** Maximum number of memory regions we expect to encounter */ +#define MAX_MEMORY_REGIONS 8 + +/** A memory map */ +struct memory_map { + /** Memory regions */ + struct memory_region regions[MAX_MEMORY_REGIONS]; + /** Number of used regions */ + unsigned int count; +}; + +/** + * Get memory map + * + * @v memmap Memory map to fill in + */ +void get_memmap ( struct memory_map *memmap ); + #endif /* _IPXE_IO_H */ diff --git a/src/include/ipxe/memmap.h b/src/include/ipxe/memmap.h deleted file mode 100644 index cfd3fe9d..00000000 --- a/src/include/ipxe/memmap.h +++ /dev/null @@ -1,36 +0,0 @@ -#ifndef _IPXE_MEMMAP_H -#define _IPXE_MEMMAP_H - -#include - -/** - * @file - * - * Memory mapping - * - */ - -FILE_LICENCE ( GPL2_OR_LATER ); - -/** A usable memory region */ -struct memory_region { - /** Physical start address */ - uint64_t start; - /** Physical end address */ - uint64_t end; -}; - -/** Maximum number of memory regions we expect to encounter */ -#define MAX_MEMORY_REGIONS 8 - -/** A memory map */ -struct memory_map { - /** Memory regions */ - struct memory_region regions[MAX_MEMORY_REGIONS]; - /** Number of used regions */ - unsigned int count; -}; - -extern void get_memmap ( struct memory_map *memmap ); - -#endif /* _IPXE_MEMMAP_H */ diff --git a/src/interface/efi/efi_io.c b/src/interface/efi/efi_io.c index 13a3e232..9a9aad31 100644 --- a/src/interface/efi/efi_io.c +++ b/src/interface/efi/efi_io.c @@ -176,6 +176,17 @@ static void efi_iodelay ( void ) { outb ( 0, 0x80 ); } +/** + * Get memory map + * + * Can't be done on EFI so return an empty map + * + * @v memmap Memory map to fill in + */ +static void efi_get_memmap ( struct memory_map *memmap ) { + memmap->count = 0; +} + PROVIDE_IOAPI_INLINE ( efi, phys_to_bus ); PROVIDE_IOAPI_INLINE ( efi, bus_to_phys ); PROVIDE_IOAPI_INLINE ( efi, ioremap ); @@ -203,3 +214,4 @@ PROVIDE_IOAPI_INLINE ( efi, outsw ); PROVIDE_IOAPI_INLINE ( efi, outsl ); PROVIDE_IOAPI ( efi, iodelay, efi_iodelay ); PROVIDE_IOAPI_INLINE ( efi, mb ); +PROVIDE_IOAPI ( efi, get_memmap, efi_get_memmap ); diff --git a/src/tests/umalloc_test.c b/src/tests/umalloc_test.c index 157835d8..53810833 100644 --- a/src/tests/umalloc_test.c +++ b/src/tests/umalloc_test.c @@ -1,7 +1,7 @@ #include #include #include -#include +#include void umalloc_test ( void ) { struct memory_map memmap;