kernel/src/info.h

88 lines
1.9 KiB
C
Raw Normal View History

2021-12-12 14:00:17 +00:00
#ifndef KERNEL_INCLUDED_INFO
#define KERNEL_INCLUDED_INFO 1
2017-11-04 10:09:53 +00:00
#ifdef __cplusplus
extern "C" {
#endif
2021-12-17 22:32:04 +00:00
#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
#include <kernaux/multiboot2.h>
2021-12-19 00:39:04 +00:00
#include <kernaux/pfa.h>
2021-12-12 14:00:17 +00:00
#define KERNEL_INFO_CMDLINE_SIZE_MAX 256
#define KERNEL_INFO_CMDLINE_SLEN_MAX (KERNEL_INFO_CMDLINE_SIZE_MAX - 1)
2017-11-04 10:09:53 +00:00
2021-12-12 14:00:17 +00:00
#define KERNEL_INFO_MODULES_MAX 20
#define KERNEL_INFO_AREAS_MAX 20
2017-11-04 10:09:53 +00:00
2021-12-12 14:00:17 +00:00
struct Kernel_Info_Module {
2021-12-17 22:32:04 +00:00
size_t base;
size_t size;
size_t limit;
2017-11-04 10:09:53 +00:00
2021-12-12 14:00:17 +00:00
char cmdline[KERNEL_INFO_CMDLINE_SIZE_MAX];
2017-11-04 10:09:53 +00:00
};
2021-12-12 14:00:17 +00:00
struct Kernel_Info_Area {
2021-12-17 22:32:04 +00:00
// We use uint64_t instead of size_t because it what Multiboot 2 gives us.
uint64_t base;
uint64_t size;
uint64_t limit;
2017-11-04 10:09:53 +00:00
2021-12-17 22:32:04 +00:00
bool is_available;
2017-11-04 10:09:53 +00:00
};
2021-12-12 14:00:17 +00:00
struct Kernel_Info {
2021-12-19 00:11:12 +00:00
bool initialized;
2021-12-12 14:00:17 +00:00
char cmdline[KERNEL_INFO_CMDLINE_SIZE_MAX];
2017-11-04 10:09:53 +00:00
2021-12-12 14:00:17 +00:00
struct Kernel_Info_Module modules[KERNEL_INFO_MODULES_MAX];
2021-12-17 22:32:04 +00:00
size_t modules_count;
2017-11-04 10:09:53 +00:00
2021-12-12 14:00:17 +00:00
struct Kernel_Info_Area areas[KERNEL_INFO_AREAS_MAX];
2021-12-17 22:32:04 +00:00
size_t areas_count;
2017-11-04 10:09:53 +00:00
2021-12-17 22:32:04 +00:00
// Higher-half offset, typically 3 GiB
size_t kernel_offset;
2021-12-18 21:59:16 +00:00
size_t kernel_size;
2021-12-17 22:32:04 +00:00
size_t kernel_phys_base;
size_t kernel_virt_base;
2017-11-04 10:09:53 +00:00
2021-12-17 22:32:04 +00:00
size_t modules_total_size;
size_t kernel_and_modules_total_size;
2017-11-05 15:26:30 +00:00
2021-12-18 21:59:16 +00:00
size_t kernel_stack_start;
size_t kernel_stack_size;
2017-11-04 10:09:53 +00:00
};
2021-12-17 23:26:56 +00:00
void kernel_info_init_start(
2021-12-17 22:45:22 +00:00
struct Kernel_Info *kinfo,
size_t offset,
size_t size,
size_t phys_base,
size_t virt_base,
2021-12-18 21:59:16 +00:00
size_t stack_start,
size_t stack_size
2021-12-17 22:45:22 +00:00
);
2021-12-18 02:42:03 +00:00
void kernel_info_init_finish(struct Kernel_Info *kinfo);
2021-12-18 02:29:25 +00:00
void kernel_info_init_from_multiboot2(
struct Kernel_Info *kinfo,
2022-01-13 04:27:01 +00:00
const struct KernAux_Multiboot2_Info *multiboot2_info
);
2021-12-17 23:26:56 +00:00
2021-12-18 02:42:03 +00:00
bool kernel_info_is_valid(const struct Kernel_Info *kinfo);
2021-12-17 23:05:01 +00:00
void kernel_info_print(const struct Kernel_Info *kinfo);
2021-12-19 00:39:04 +00:00
void kernel_info_setup_pfa(const struct Kernel_Info *kinfo, KernAux_PFA pfa);
2017-11-04 10:09:53 +00:00
#ifdef __cplusplus
}
#endif
#endif