diff options
| author | Amlal El Mahrouss <amlal.elmahrouss@icloud.com> | 2025-02-12 17:38:32 +0100 |
|---|---|---|
| committer | Amlal El Mahrouss <amlal.elmahrouss@icloud.com> | 2025-02-12 17:38:32 +0100 |
| commit | 989893d2ac4086b1c89869c258bc138793a7ea8e (patch) | |
| tree | 03a6162ceb63f1a3cb3aa30b7b9868c1e68bbd52 /dev/Kernel/HALKit/AMD64/HalPagingMgrAMD64.cc | |
| parent | 52f882514384c6be00752be0dca9bd511db9d450 (diff) | |
ADD: AHCI driver is almost done..., Paging API tweaks.
Signed-off-by: Amlal El Mahrouss <amlal.elmahrouss@icloud.com>
Diffstat (limited to 'dev/Kernel/HALKit/AMD64/HalPagingMgrAMD64.cc')
| -rw-r--r-- | dev/Kernel/HALKit/AMD64/HalPagingMgrAMD64.cc | 20 |
1 files changed, 8 insertions, 12 deletions
diff --git a/dev/Kernel/HALKit/AMD64/HalPagingMgrAMD64.cc b/dev/Kernel/HALKit/AMD64/HalPagingMgrAMD64.cc index 5c9d221c..ab8c5b97 100644 --- a/dev/Kernel/HALKit/AMD64/HalPagingMgrAMD64.cc +++ b/dev/Kernel/HALKit/AMD64/HalPagingMgrAMD64.cc @@ -23,7 +23,7 @@ namespace Kernel::HAL { PDE* fPde{nullptr}; PTE* fPte{nullptr}; - VoidPtr fVAddr{nullptr}; + VoidPtr fPAddr{nullptr}; } fInternalStore; Bool fStoreOp{No}; // Store operation is in progress. @@ -62,7 +62,7 @@ namespace Kernel::HAL kout << (pte->User ? "User" : "Not User") << endl; } - STATIC Int32 mmi_map_page_table_entry(VoidPtr virtual_address, UInt32 flags, NE_PTE* pt_entry, NE_PDE* pd_entry); + STATIC Int32 mmi_map_page_table_entry(UInt32 virtual_address, UInt32 flags, NE_PTE* pt_entry, NE_PDE* pd_entry); /***********************************************************************************/ /// @brief Maps or allocates a page from virtual_address. @@ -71,7 +71,7 @@ namespace Kernel::HAL /// @param flags the flags to put on the page. /// @return Status code of page manipulation process. /***********************************************************************************/ - EXTERN_C Int32 mm_map_page(VoidPtr virtual_address, UInt32 flags) + EXTERN_C Int32 mm_map_page(VoidPtr virtual_address, VoidPtr physical_address, UInt32 flags) { if (!virtual_address || !flags) @@ -93,12 +93,6 @@ namespace Kernel::HAL page_store.fStoreOp = Yes; - if (page_store.fInternalStore.fVAddr == virtual_address) - { - page_store.fStoreOp = No; - return mmi_map_page_table_entry(page_store.fInternalStore.fVAddr, flags, page_store.fInternalStore.fPte, page_store.fInternalStore.fPde); - } - const auto cPmlEntrySize = 8; // Read the PML4 entry from memory @@ -120,14 +114,14 @@ namespace Kernel::HAL // Lastly, grab the pte entry. NE_PDE* pde_struct = reinterpret_cast<NE_PDE*>(pt_base); - return mmi_map_page_table_entry(virtual_address, flags, pde_struct->fEntries[pt_entry], pde_struct); + return mmi_map_page_table_entry((UInt32)(UInt64)physical_address, flags, pde_struct->fEntries[pt_entry], pde_struct); } /***********************************************************************************/ /// @brief Maps flags for a specific pte. /// @internal Internal function. /***********************************************************************************/ - STATIC Int32 mmi_map_page_table_entry(VoidPtr virtual_address, UInt32 flags, NE_PTE* pt_entry, NE_PDE* pd_entry) + STATIC Int32 mmi_map_page_table_entry(UInt32 physical_address, UInt32 flags, NE_PTE* pt_entry, NE_PDE* pd_entry) { if (!pt_entry) return 1; @@ -149,6 +143,8 @@ namespace Kernel::HAL else if (flags & ~kMMFlagsUser) pt_entry->User = false; + pt_entry->PhysicalAddress = physical_address; + hal_invl_tlb(reinterpret_cast<VoidPtr>(pt_entry)); mmi_page_status(pt_entry); @@ -159,7 +155,7 @@ namespace Kernel::HAL page_store.fInternalStore.fPde = pd_entry; page_store.fInternalStore.fPte = pt_entry; - page_store.fInternalStore.fVAddr = virtual_address; + page_store.fInternalStore.fPAddr = (VoidPtr)(UIntPtr)physical_address; page_store.fStoreOp = No; |
