diff options
| author | Piotr Jaroszyński | 2010-07-27 20:37:55 +0200 |
|---|---|---|
| committer | Michael Brown | 2010-08-16 17:54:03 +0200 |
| commit | 5bbad9c8f0eacf92fa0ddb6d2d34afe7a0d4278e (patch) | |
| tree | 6994da16fdddf65f13409b184fdbba7d3907ff80 | |
| parent | [dhcp] Allow multiple interfaces in dhcp command (diff) | |
| download | ipxe-5bbad9c8f0eacf92fa0ddb6d2d34afe7a0d4278e.tar.gz ipxe-5bbad9c8f0eacf92fa0ddb6d2d34afe7a0d4278e.tar.xz ipxe-5bbad9c8f0eacf92fa0ddb6d2d34afe7a0d4278e.zip | |
[ioapi] Move get_memmap() to the I/O API group
pcbios specific get_memmap() is used by the b44 driver making
all-drivers builds fail on other platforms. Move it to the I/O API
group and provide a dummy implementation on EFI.
Signed-off-by: Piotr Jaroszyński <p.jaroszynski@gmail.com>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
| -rw-r--r-- | src/arch/i386/core/relocate.c | 1 | ||||
| -rw-r--r-- | src/arch/i386/firmware/pcbios/hidemem.c | 2 | ||||
| -rw-r--r-- | src/arch/i386/firmware/pcbios/memmap.c | 6 | ||||
| -rw-r--r-- | src/arch/i386/image/com32.c | 2 | ||||
| -rw-r--r-- | src/arch/i386/image/multiboot.c | 2 | ||||
| -rw-r--r-- | src/arch/i386/interface/pcbios/int13.c | 2 | ||||
| -rw-r--r-- | src/arch/i386/interface/pcbios/memtop_umalloc.c | 2 | ||||
| -rw-r--r-- | src/drivers/net/b44.c | 3 | ||||
| -rw-r--r-- | src/image/segment.c | 2 | ||||
| -rw-r--r-- | src/include/ipxe/io.h | 26 | ||||
| -rw-r--r-- | src/include/ipxe/memmap.h | 36 | ||||
| -rw-r--r-- | src/interface/efi/efi_io.c | 12 | ||||
| -rw-r--r-- | src/tests/umalloc_test.c | 2 |
13 files changed, 51 insertions, 47 deletions
diff --git a/src/arch/i386/core/relocate.c b/src/arch/i386/core/relocate.c index e966bbeaa..47450e757 100644 --- a/src/arch/i386/core/relocate.c +++ b/src/arch/i386/core/relocate.c @@ -1,6 +1,5 @@ #include <ipxe/io.h> #include <registers.h> -#include <ipxe/memmap.h> /* * Originally by Eric Biederman diff --git a/src/arch/i386/firmware/pcbios/hidemem.c b/src/arch/i386/firmware/pcbios/hidemem.c index 322be9e41..cc5fc28f7 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 <basemem.h> #include <fakee820.h> #include <ipxe/init.h> -#include <ipxe/memmap.h> +#include <ipxe/io.h> #include <ipxe/hidemem.h> /** 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 8fa1f4c3d..01080c7b8 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 <realmode.h> #include <bios.h> #include <memsizes.h> -#include <ipxe/memmap.h> +#include <ipxe/io.h> /** * @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 381987ab9..72e679f16 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 <ipxe/image.h> #include <ipxe/segment.h> #include <ipxe/init.h> -#include <ipxe/memmap.h> +#include <ipxe/io.h> 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 b3c6b8f74..e2075defe 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 <ipxe/uaccess.h> #include <ipxe/image.h> #include <ipxe/segment.h> -#include <ipxe/memmap.h> +#include <ipxe/io.h> #include <ipxe/elf.h> #include <ipxe/init.h> #include <ipxe/features.h> diff --git a/src/arch/i386/interface/pcbios/int13.c b/src/arch/i386/interface/pcbios/int13.c index a2cf5e6b9..f72dc5fa9 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 <assert.h> #include <ipxe/list.h> #include <ipxe/blockdev.h> -#include <ipxe/memmap.h> +#include <ipxe/io.h> #include <realmode.h> #include <bios.h> #include <biosint.h> diff --git a/src/arch/i386/interface/pcbios/memtop_umalloc.c b/src/arch/i386/interface/pcbios/memtop_umalloc.c index 51240f2ab..16736e194 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 <errno.h> #include <ipxe/uaccess.h> #include <ipxe/hidemem.h> -#include <ipxe/memmap.h> +#include <ipxe/io.h> #include <ipxe/umalloc.h> /** Alignment of external allocated memory */ diff --git a/src/drivers/net/b44.c b/src/drivers/net/b44.c index 29aa5fa6b..a104652cb 100644 --- a/src/drivers/net/b44.c +++ b/src/drivers/net/b44.c @@ -43,7 +43,6 @@ FILE_LICENCE ( GPL2_OR_LATER ); #include <ipxe/netdevice.h> #include <ipxe/ethernet.h> #include <ipxe/if_ether.h> -#include <ipxe/memmap.h> #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 c3f0b8d5c..97f6a9959 100644 --- a/src/image/segment.c +++ b/src/image/segment.c @@ -27,7 +27,7 @@ FILE_LICENCE ( GPL2_OR_LATER ); #include <errno.h> #include <ipxe/uaccess.h> -#include <ipxe/memmap.h> +#include <ipxe/io.h> #include <ipxe/errortab.h> #include <ipxe/segment.h> diff --git a/src/include/ipxe/io.h b/src/include/ipxe/io.h index 5bfd89987..b4d88fe89 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 cfd3fe9dc..000000000 --- a/src/include/ipxe/memmap.h +++ /dev/null @@ -1,36 +0,0 @@ -#ifndef _IPXE_MEMMAP_H -#define _IPXE_MEMMAP_H - -#include <stdint.h> - -/** - * @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 13a3e2322..9a9aad31c 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 157835d8d..53810833c 100644 --- a/src/tests/umalloc_test.c +++ b/src/tests/umalloc_test.c @@ -1,7 +1,7 @@ #include <stdio.h> #include <ipxe/uaccess.h> #include <ipxe/umalloc.h> -#include <ipxe/memmap.h> +#include <ipxe/io.h> void umalloc_test ( void ) { struct memory_map memmap; |
