2020-09-20 12:03:44 +02:00
|
|
|
#ifndef __MM__PMM_H__
|
|
|
|
#define __MM__PMM_H__
|
2020-06-05 17:51:33 +02:00
|
|
|
|
|
|
|
#include <stdint.h>
|
2021-01-02 21:44:27 +01:00
|
|
|
#include <stddef.h>
|
|
|
|
#include <stdbool.h>
|
2022-08-13 19:54:49 +02:00
|
|
|
|
|
|
|
struct memmap_entry {
|
|
|
|
uint64_t base;
|
|
|
|
uint64_t length;
|
|
|
|
uint32_t type;
|
|
|
|
uint32_t unused;
|
|
|
|
};
|
2020-06-05 17:51:33 +02:00
|
|
|
|
2020-09-19 15:29:19 +02:00
|
|
|
#define MEMMAP_USABLE 1
|
|
|
|
#define MEMMAP_RESERVED 2
|
|
|
|
#define MEMMAP_ACPI_RECLAIMABLE 3
|
|
|
|
#define MEMMAP_ACPI_NVS 4
|
|
|
|
#define MEMMAP_BAD_MEMORY 5
|
|
|
|
#define MEMMAP_BOOTLOADER_RECLAIMABLE 0x1000
|
|
|
|
#define MEMMAP_KERNEL_AND_MODULES 0x1001
|
2021-04-07 02:10:28 +02:00
|
|
|
#define MEMMAP_FRAMEBUFFER 0x1002
|
2021-03-05 06:10:58 +01:00
|
|
|
#define MEMMAP_EFI_RECLAIMABLE 0x2000
|
2020-09-19 15:29:19 +02:00
|
|
|
|
2021-10-07 13:04:41 +11:00
|
|
|
struct meminfo {
|
|
|
|
size_t uppermem;
|
|
|
|
size_t lowermem;
|
|
|
|
};
|
|
|
|
|
2022-08-13 19:54:49 +02:00
|
|
|
struct meminfo mmap_get_info(size_t mmap_count, struct memmap_entry *mmap);
|
2021-10-07 13:04:41 +11:00
|
|
|
|
2022-09-02 02:29:12 +02:00
|
|
|
#if defined (BIOS)
|
2022-08-13 19:54:49 +02:00
|
|
|
extern struct memmap_entry memmap[];
|
2020-12-10 08:47:37 +01:00
|
|
|
extern size_t memmap_entries;
|
2021-09-03 03:10:23 +02:00
|
|
|
#endif
|
2020-12-10 08:47:37 +01:00
|
|
|
|
2022-09-02 02:29:12 +02:00
|
|
|
#if defined (UEFI)
|
2022-08-13 19:54:49 +02:00
|
|
|
extern struct memmap_entry *memmap;
|
2021-09-03 03:10:23 +02:00
|
|
|
extern size_t memmap_entries;
|
2022-09-24 03:57:55 +02:00
|
|
|
|
|
|
|
extern struct memmap_entry *untouched_memmap;
|
|
|
|
extern size_t untouched_memmap_entries;
|
2021-07-06 22:45:16 +02:00
|
|
|
#endif
|
|
|
|
|
2021-12-14 06:47:28 +01:00
|
|
|
extern bool allocations_disallowed;
|
|
|
|
|
2020-06-05 17:51:33 +02:00
|
|
|
void init_memmap(void);
|
2022-08-13 19:54:49 +02:00
|
|
|
struct memmap_entry *get_memmap(size_t *entries);
|
|
|
|
struct memmap_entry *get_raw_memmap(size_t *entry_count);
|
|
|
|
void print_memmap(struct memmap_entry *mm, size_t size);
|
2022-09-25 20:37:17 +02:00
|
|
|
bool memmap_alloc_range_in(struct memmap_entry *m, size_t *_count,
|
|
|
|
uint64_t base, uint64_t length, uint32_t type, uint32_t overlay_type, bool do_panic, bool simulation, bool new_entry);
|
2022-06-27 10:48:03 +02:00
|
|
|
bool memmap_alloc_range(uint64_t base, uint64_t length, uint32_t type, uint32_t overlay_type, bool panic, bool simulation, bool new_entry);
|
2021-07-09 14:40:44 +02:00
|
|
|
void pmm_randomise_memory(void);
|
2020-09-20 12:03:44 +02:00
|
|
|
|
|
|
|
void *ext_mem_alloc(size_t count);
|
|
|
|
void *ext_mem_alloc_type(size_t count, uint32_t type);
|
2021-10-29 01:15:11 +02:00
|
|
|
void *ext_mem_alloc_type_aligned(size_t count, uint32_t type, size_t alignment);
|
2020-09-20 12:03:44 +02:00
|
|
|
|
|
|
|
void *conv_mem_alloc(size_t count);
|
2020-06-05 17:51:33 +02:00
|
|
|
|
2021-10-21 01:27:05 +02:00
|
|
|
void pmm_free(void *ptr, size_t length);
|
|
|
|
|
2022-09-02 02:29:12 +02:00
|
|
|
#if defined (UEFI)
|
2021-05-06 04:31:05 +02:00
|
|
|
void pmm_release_uefi_mem(void);
|
2021-03-10 01:23:44 +01:00
|
|
|
#endif
|
|
|
|
|
2020-06-05 17:51:33 +02:00
|
|
|
#endif
|