limine: Add kernel address request
This commit is contained in:
parent
f487061f40
commit
2d048ecfde
@ -269,4 +269,21 @@ struct limine_boot_time_request {
|
|||||||
LIMINE_PTR(struct limine_boot_time_response *) response;
|
LIMINE_PTR(struct limine_boot_time_response *) response;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Kernel address
|
||||||
|
|
||||||
|
#define LIMINE_KERNEL_ADDRESS_REQUEST { LIMINE_COMMON_MAGIC, 0x71ba76863cc55f63, 0xb2644a48c516a487 }
|
||||||
|
|
||||||
|
struct limine_kernel_address_response {
|
||||||
|
uint64_t revision;
|
||||||
|
|
||||||
|
uint64_t physical_base;
|
||||||
|
uint64_t virtual_base;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct limine_kernel_address_request {
|
||||||
|
uint64_t id[4];
|
||||||
|
uint64_t revision;
|
||||||
|
LIMINE_PTR(struct limine_kernel_address_response *) response;
|
||||||
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -246,6 +246,22 @@ FEAT_START
|
|||||||
bootloader_info_request->response = reported_addr(bootloader_info_response);
|
bootloader_info_request->response = reported_addr(bootloader_info_response);
|
||||||
FEAT_END
|
FEAT_END
|
||||||
|
|
||||||
|
// Kernel address feature
|
||||||
|
FEAT_START
|
||||||
|
struct limine_kernel_address_request *kernel_address_request = get_request(LIMINE_KERNEL_ADDRESS_REQUEST);
|
||||||
|
if (kernel_address_request == NULL) {
|
||||||
|
break; // next feature
|
||||||
|
}
|
||||||
|
|
||||||
|
struct limine_kernel_address_response *kernel_address_response =
|
||||||
|
ext_mem_alloc(sizeof(struct limine_kernel_address_response));
|
||||||
|
|
||||||
|
kernel_address_response->physical_base = physical_base;
|
||||||
|
kernel_address_response->virtual_base = virtual_base;
|
||||||
|
|
||||||
|
kernel_address_request->response = reported_addr(kernel_address_response);
|
||||||
|
FEAT_END
|
||||||
|
|
||||||
// HHDM feature
|
// HHDM feature
|
||||||
FEAT_START
|
FEAT_START
|
||||||
struct limine_hhdm_request *hhdm_request = get_request(LIMINE_HHDM_REQUEST);
|
struct limine_hhdm_request *hhdm_request = get_request(LIMINE_HHDM_REQUEST);
|
||||||
|
@ -57,6 +57,11 @@ struct limine_boot_time_request boot_time_request = {
|
|||||||
.revision = 0, .response = NULL
|
.revision = 0, .response = NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct limine_kernel_address_request kernel_address_request = {
|
||||||
|
.id = LIMINE_KERNEL_ADDRESS_REQUEST,
|
||||||
|
.revision = 0, .response = NULL
|
||||||
|
};
|
||||||
|
|
||||||
struct limine_smp_request _smp_request = {
|
struct limine_smp_request _smp_request = {
|
||||||
.id = LIMINE_SMP_REQUEST,
|
.id = LIMINE_SMP_REQUEST,
|
||||||
.revision = 0, .response = NULL
|
.revision = 0, .response = NULL
|
||||||
@ -123,6 +128,17 @@ static void limine_main(void) {
|
|||||||
|
|
||||||
e9_printf("Kernel slide: %x", kernel_slide);
|
e9_printf("Kernel slide: %x", kernel_slide);
|
||||||
|
|
||||||
|
FEAT_START
|
||||||
|
e9_printf("");
|
||||||
|
if (kernel_address_request.response == NULL) {
|
||||||
|
e9_printf("Kernel address not passed");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
struct limine_kernel_address_response *ka_response = kernel_address_request.response;
|
||||||
|
e9_printf("Physical base: %x", ka_response->physical_base);
|
||||||
|
e9_printf("Virtual base: %x", ka_response->virtual_base);
|
||||||
|
FEAT_END
|
||||||
|
|
||||||
FEAT_START
|
FEAT_START
|
||||||
e9_printf("");
|
e9_printf("");
|
||||||
if (bootloader_info_request.response == NULL) {
|
if (bootloader_info_request.response == NULL) {
|
||||||
|
Loading…
Reference in New Issue
Block a user