offset acpi and apic pointers to hhdm
This commit is contained in:
@@ -1,4 +1,4 @@
|
|||||||
use crate::{drivers::acpi::SMP_REQUEST, hcf, libs::cell::OnceCell};
|
use crate::{drivers::acpi::SMP_REQUEST, hcf, libs::cell::OnceCell, mem::HHDM_OFFSET};
|
||||||
|
|
||||||
use alloc::{sync::Arc, vec::Vec};
|
use alloc::{sync::Arc, vec::Vec};
|
||||||
|
|
||||||
@@ -96,7 +96,7 @@ impl APIC {
|
|||||||
|
|
||||||
crate::log_info!("MADT located at: {:p}", core::ptr::addr_of!(madt));
|
crate::log_info!("MADT located at: {:p}", core::ptr::addr_of!(madt));
|
||||||
|
|
||||||
let mut lapic_ptr = madt.inner.local_apic_address as *mut u8;
|
let mut lapic_ptr = (madt.inner.local_apic_address as usize + *HHDM_OFFSET) as *mut u8;
|
||||||
let mut io_apic = None;
|
let mut io_apic = None;
|
||||||
let mut io_apic_source_override = None;
|
let mut io_apic_source_override = None;
|
||||||
|
|
||||||
@@ -117,7 +117,8 @@ impl APIC {
|
|||||||
io_apic = Some(IOAPIC {
|
io_apic = Some(IOAPIC {
|
||||||
ioapic_id: core::ptr::read_unaligned(ptr.add(2)),
|
ioapic_id: core::ptr::read_unaligned(ptr.add(2)),
|
||||||
_reserved: core::ptr::read_unaligned(ptr.add(3)),
|
_reserved: core::ptr::read_unaligned(ptr.add(3)),
|
||||||
ptr: (core::ptr::read_unaligned(ptr.add(4).cast::<u32>())) as *mut u8,
|
ptr: (core::ptr::read_unaligned(ptr.add(4).cast::<u32>()) as usize
|
||||||
|
+ *HHDM_OFFSET) as *mut u8,
|
||||||
global_interrupt_base: core::ptr::read_unaligned(ptr.add(8).cast::<u32>()),
|
global_interrupt_base: core::ptr::read_unaligned(ptr.add(8).cast::<u32>()),
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
@@ -132,8 +133,9 @@ impl APIC {
|
|||||||
})
|
})
|
||||||
},
|
},
|
||||||
5 => {
|
5 => {
|
||||||
lapic_ptr =
|
lapic_ptr = (unsafe { core::ptr::read_unaligned(ptr.add(4).cast::<u64>()) }
|
||||||
unsafe { core::ptr::read_unaligned(ptr.add(4).cast::<u64>()) } as *mut u8
|
as usize
|
||||||
|
+ *HHDM_OFFSET) as *mut u8
|
||||||
}
|
}
|
||||||
_ => {}
|
_ => {}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ use limine::SmpRequest;
|
|||||||
use crate::{
|
use crate::{
|
||||||
arch::io::{inw, outb},
|
arch::io::{inw, outb},
|
||||||
libs::cell::OnceCell,
|
libs::cell::OnceCell,
|
||||||
|
mem::HHDM_OFFSET,
|
||||||
};
|
};
|
||||||
|
|
||||||
pub static SMP_REQUEST: SmpRequest = SmpRequest::new(0);
|
pub static SMP_REQUEST: SmpRequest = SmpRequest::new(0);
|
||||||
@@ -31,7 +32,9 @@ pub struct SDT<'a, T> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl<'a, T> SDT<'a, T> {
|
impl<'a, T> SDT<'a, T> {
|
||||||
unsafe fn new(ptr: *const u8) -> Self {
|
unsafe fn new(mut ptr: *const u8) -> Self {
|
||||||
|
ptr = ptr.add(*HHDM_OFFSET);
|
||||||
|
|
||||||
let length = core::ptr::read_unaligned(ptr.add(4).cast::<u32>());
|
let length = core::ptr::read_unaligned(ptr.add(4).cast::<u32>());
|
||||||
let data = core::slice::from_raw_parts(ptr, length as usize);
|
let data = core::slice::from_raw_parts(ptr, length as usize);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user