1dc47ac61SPaolo Bonzini #ifndef _ALLOC_PHYS_H_ 2dc47ac61SPaolo Bonzini #define _ALLOC_PHYS_H_ 3dc47ac61SPaolo Bonzini /* 4dc47ac61SPaolo Bonzini * phys_alloc is a very simple allocator which allows physical memory 5dc47ac61SPaolo Bonzini * to be partitioned into regions until all memory is allocated. 6dc47ac61SPaolo Bonzini * 7dc47ac61SPaolo Bonzini * Note: This is such a simple allocator that there is no way to free 8dc47ac61SPaolo Bonzini * a region. For more complicated memory management a single region 9dc47ac61SPaolo Bonzini * can be allocated, but then have its memory managed by a more 10dc47ac61SPaolo Bonzini * sophisticated allocator, e.g. a page allocator. 11dc47ac61SPaolo Bonzini * 12dc47ac61SPaolo Bonzini * Copyright (C) 2014, Red Hat Inc, Andrew Jones <drjones@redhat.com> 13dc47ac61SPaolo Bonzini * 14dc47ac61SPaolo Bonzini * This work is licensed under the terms of the GNU LGPL, version 2. 15dc47ac61SPaolo Bonzini */ 16dc47ac61SPaolo Bonzini #include "libcflat.h" 17dc47ac61SPaolo Bonzini 18dc47ac61SPaolo Bonzini #define DEFAULT_MINIMUM_ALIGNMENT 32 19dc47ac61SPaolo Bonzini 20dc47ac61SPaolo Bonzini /* 21dc47ac61SPaolo Bonzini * phys_alloc_init creates the initial free memory region of size @size 22dc47ac61SPaolo Bonzini * at @base. The minimum alignment is set to DEFAULT_MINIMUM_ALIGNMENT. 23dc47ac61SPaolo Bonzini */ 24dc47ac61SPaolo Bonzini extern void phys_alloc_init(phys_addr_t base, phys_addr_t size); 25dc47ac61SPaolo Bonzini 26dc47ac61SPaolo Bonzini /* 27dc47ac61SPaolo Bonzini * phys_alloc_set_minimum_alignment sets the minimum alignment to 28dc47ac61SPaolo Bonzini * @align. 29dc47ac61SPaolo Bonzini */ 30dc47ac61SPaolo Bonzini extern void phys_alloc_set_minimum_alignment(phys_addr_t align); 31dc47ac61SPaolo Bonzini 32dc47ac61SPaolo Bonzini /* 33dc47ac61SPaolo Bonzini * phys_alloc_show outputs all currently allocated regions with the 34dc47ac61SPaolo Bonzini * following format 35dc47ac61SPaolo Bonzini * <start_addr>-<end_addr> [<USED|FREE>] 36dc47ac61SPaolo Bonzini */ 37dc47ac61SPaolo Bonzini extern void phys_alloc_show(void); 38dc47ac61SPaolo Bonzini 39937e2392SPaolo Bonzini /* 40*2b527259SAndrew Jones * phys_alloc_get_unused allocates all remaining memory from the region 41*2b527259SAndrew Jones * passed to phys_alloc_init, returning the newly allocated memory's base 42*2b527259SAndrew Jones * and top addresses. phys_allo_get_unused will still return base and top 43*2b527259SAndrew Jones * when no free memory is remaining, but base will equal top. 44937e2392SPaolo Bonzini */ 45937e2392SPaolo Bonzini extern void phys_alloc_get_unused(phys_addr_t *p_base, phys_addr_t *p_top); 46937e2392SPaolo Bonzini 47dc47ac61SPaolo Bonzini #endif /* _ALLOC_PHYS_H_ */ 48