1 /* 2 * Copyright 2010, Ingo Weinhold, ingo_weinhold@gmx.de. 3 * Copyright 2004-2007, Axel Dörfler, axeld@pinc-software.de. All rights reserved. 4 * Distributed under the terms of the MIT License. 5 */ 6 #ifndef KERNEL_BOOT_ADDR_RANGE_H 7 #define KERNEL_BOOT_ADDR_RANGE_H 8 9 10 #include <SupportDefs.h> 11 12 13 typedef struct addr_range { 14 addr_t start; 15 size_t size; 16 } addr_range; 17 18 19 typedef struct phys_addr_range { 20 phys_addr_t start; 21 phys_size_t size; 22 } phys_addr_range; 23 24 25 #ifdef __cplusplus 26 extern "C" { 27 #endif 28 29 status_t insert_address_range(addr_range* ranges, uint32* _numRanges, 30 uint32 maxRanges, addr_t start, size_t size); 31 status_t remove_address_range(addr_range* ranges, uint32* _numRanges, 32 uint32 maxRanges, addr_t start, size_t size); 33 bool get_free_address_range(addr_range* ranges, uint32 numRanges, addr_t base, 34 size_t size, addr_t* _rangeBase); 35 bool is_address_range_covered(addr_range* ranges, uint32 numRanges, addr_t base, 36 size_t size); 37 void sort_address_ranges(addr_range* ranges, uint32 numRanges); 38 39 status_t insert_physical_address_range(phys_addr_range* ranges, 40 uint32* _numRanges, uint32 maxRanges, phys_addr_t start, phys_size_t size); 41 status_t remove_physical_address_range(phys_addr_range* ranges, 42 uint32* _numRanges, uint32 maxRanges, phys_addr_t start, phys_size_t size); 43 bool get_free_physical_address_range(phys_addr_range* ranges, uint32 numRanges, 44 phys_addr_t base, phys_size_t size, phys_addr_t* _rangeBase); 45 bool is_physical_address_range_covered(phys_addr_range* ranges, 46 uint32 numRanges, phys_addr_t base, phys_size_t size); 47 void sort_physical_address_ranges(phys_addr_range* ranges, uint32 numRanges); 48 49 status_t insert_physical_memory_range(phys_addr_t start, phys_size_t size); 50 status_t insert_physical_allocated_range(phys_addr_t start, phys_size_t size); 51 status_t insert_virtual_allocated_range(addr_t start, size_t size); 52 void ignore_physical_memory_ranges_beyond_4gb(); 53 54 #ifdef __cplusplus 55 } 56 #endif 57 58 #endif /* KERNEL_BOOT_ADDR_RANGE_H */ 59