Nothing to see here, move along meow
1use limine::BaseRevision;
2use limine::request::{
3 ExecutableAddressRequest, FramebufferRequest, HhdmRequest, MemoryMapRequest, ModuleRequest,
4 RequestsEndMarker, RequestsStartMarker, RsdpRequest, StackSizeRequest,
5};
6
7#[used]
8#[unsafe(link_section = ".limine_requests")]
9static BASE_REVISION: BaseRevision = BaseRevision::new();
10
11#[used]
12#[unsafe(link_section = ".limine_requests")]
13static HHDM_REQUEST: HhdmRequest = HhdmRequest::new();
14
15#[used]
16#[unsafe(link_section = ".limine_requests")]
17static MEMORY_MAP_REQUEST: MemoryMapRequest = MemoryMapRequest::new();
18
19#[used]
20#[unsafe(link_section = ".limine_requests")]
21static EXECUTABLE_ADDRESS_REQUEST: ExecutableAddressRequest = ExecutableAddressRequest::new();
22
23#[used]
24#[unsafe(link_section = ".limine_requests")]
25static MODULE_REQUEST: ModuleRequest = ModuleRequest::new();
26
27#[used]
28#[unsafe(link_section = ".limine_requests")]
29static RSDP_REQUEST: RsdpRequest = RsdpRequest::new();
30
31#[used]
32#[unsafe(link_section = ".limine_requests")]
33static FRAMEBUFFER_REQUEST: FramebufferRequest = FramebufferRequest::new();
34
35#[used]
36#[unsafe(link_section = ".limine_requests")]
37static STACK_SIZE_REQUEST: StackSizeRequest = StackSizeRequest::new().with_size(2 * 1024 * 1024);
38
39#[used]
40#[unsafe(link_section = ".limine_requests_start")]
41static _REQUESTS_START: RequestsStartMarker = RequestsStartMarker::new();
42
43#[used]
44#[unsafe(link_section = ".limine_requests_end")]
45static _REQUESTS_END: RequestsEndMarker = RequestsEndMarker::new();
46
47pub fn validate_base_revision() {
48 assert!(
49 BASE_REVISION.is_supported(),
50 "Limine base revision not supported"
51 );
52}
53
54pub fn hhdm_offset() -> u64 {
55 HHDM_REQUEST
56 .get_response()
57 .expect("HHDM response missing")
58 .offset()
59}
60
61pub fn memory_map() -> &'static [&'static limine::memory_map::Entry] {
62 MEMORY_MAP_REQUEST
63 .get_response()
64 .expect("Memory map response missing")
65 .entries()
66}
67
68pub fn executable_address() -> (u64, u64) {
69 let resp = EXECUTABLE_ADDRESS_REQUEST
70 .get_response()
71 .expect("Executable address response missing");
72 (resp.physical_base(), resp.virtual_base())
73}
74
75#[allow(dead_code)]
76pub fn modules() -> Option<&'static [&'static limine::file::File]> {
77 MODULE_REQUEST.get_response().map(|r| r.modules())
78}
79
80pub fn rsdp_address() -> Option<u64> {
81 RSDP_REQUEST.get_response().map(|r| r.address() as u64)
82}
83
84#[cfg(not(lancer_test))]
85pub fn framebuffer() -> Option<limine::framebuffer::Framebuffer<'static>> {
86 FRAMEBUFFER_REQUEST.get_response()?.framebuffers().next()
87}
88
89#[cfg(lancer_test)]
90pub fn framebuffer() -> Option<limine::framebuffer::Framebuffer<'static>> {
91 None
92}