Skip to content

Address Ranges

include/mem/address_range.h View source View on GitHub
struct address_range (7 fields) source
§ 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 (2 variants) source
§ ADDRESS_RANGE_DYNAMIC = 1 << 0
§ ADDRESS_RANGE_STATIC = 0
void address_ranges_init(void)
source
void address_ranges_print(void)
source
struct address_range * address_range_for_addr(vaddr_t vaddr)
source
bool address_range_addr_in_range(
    struct address_range *ar,
    vaddr_t vaddr
)
source
#define ADDRESS_RANGE_KERNEL_START 0xFFFF800000000000
source
TODO

To different architectures, change this (also, for 32 bit)

#define ADDRESS_RANGE_KERNEL_END 0xFFFFFFFFFFFFFFFF
source
#define ADDRESS_RANGE_DEFINE(sym, ...)
source
Expansion
#define ADDRESS_RANGE_DEFINE(sym, ...) \
    cc_wno_override_init_start LINKER_SECTION_OBJECT( \
        struct address_range, address_ranges) __address_range_##sym = { \
        .name = #sym, __VA_ARGS__, .rbt_node_internal = RBT_NODE_INIT}; \
    cc_wno_override_init_end
#define ADDRESS_RANGE(sym)
source
Expansion
#define ADDRESS_RANGE(sym) (__address_range_##sym)