#ifndef _ALLOC_PHYS_H_ #define _ALLOC_PHYS_H_ /* * phys_alloc is a very simple allocator which allows physical memory * to be partitioned into regions until all memory is allocated. * * Note: This is such a simple allocator that there is no way to free * a region. For more complicated memory management a single region * can be allocated, but then have its memory managed by a more * sophisticated allocator, e.g. a page allocator. * * Copyright (C) 2014, Red Hat Inc, Andrew Jones * * This work is licensed under the terms of the GNU LGPL, version 2. */ #include "libcflat.h" #define DEFAULT_MINIMUM_ALIGNMENT 32 /* * phys_alloc_init creates the initial free memory region of size @size * at @base. The minimum alignment is set to DEFAULT_MINIMUM_ALIGNMENT. */ extern void phys_alloc_init(phys_addr_t base, phys_addr_t size); /* * phys_alloc_set_minimum_alignment sets the minimum alignment to * @align. */ extern void phys_alloc_set_minimum_alignment(phys_addr_t align); /* * phys_alloc_show outputs all currently allocated regions with the * following format * - [] */ extern void phys_alloc_show(void); /* * phys_alloc_get_unused allocates all remaining memory from the region * passed to phys_alloc_init, returning the newly allocated memory's base * and top addresses. phys_allo_get_unused will still return base and top * when no free memory is remaining, but base will equal top. */ extern void phys_alloc_get_unused(phys_addr_t *p_base, phys_addr_t *p_top); /* * Search for memory that can only be used when the MMU is on, and reinitialize * the physical memory allocator using it. */ extern void find_highmem(void); #endif /* _ALLOC_PHYS_H_ */