include/mem/address_range.h View source View on GitHub
struct address_range {
const char *name;
vaddr_t base;
size_t size;
size_t align;
enum address_range_flags flags;
struct rbt_node rbt_node_internal;
struct page_fault_handler *page_fault_handler;
};
enum address_range_flags {
ADDRESS_RANGE_DYNAMIC = 1 << 0,
ADDRESS_RANGE_STATIC = 0,
};
void address_ranges_init();
void address_ranges_print();
struct address_range * address_range_for_addr(vaddr_t vaddr);
bool address_range_addr_in_range(struct address_range *ar, vaddr_t vaddr);
#define ADDRESS_RANGE_KERNEL_START 0xFFFF800000000000
#define ADDRESS_RANGE_KERNEL_END 0xFFFFFFFFFFFFFFFF
#define ADDRESS_RANGE_DECLARE(sym, ...) \
LINKER_SECTION_OBJECT(struct address_range, address_ranges) \
__address_range_##sym = { \
.name = #sym, __VA_ARGS__, .rbt_node_internal = RBT_NODE_INIT}
#define ADDRESS_RANGE(sym) (__address_range_##sym)