xref: /haiku/headers/private/kernel/boot/addr_range.h (revision 45bd7bb3db9d9e4dcb02b89a3e7c2bf382c0a88c)
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