blob: 611aa70d2041336d7f00fd7ff0c1c2ada4fc9fee [file] [log] [blame]
#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 <drjones@redhat.com>
*
* 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
* <start_addr>-<end_addr> [<USED|FREE>]
*/
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_alloc_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_ */