summaryrefslogtreecommitdiffhomepage
path: root/dev/Kernel/HALKit/AMD64/HalPagingMgrAMD64.cc
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal.elmahrouss@icloud.com>2025-02-12 17:38:32 +0100
committerAmlal El Mahrouss <amlal.elmahrouss@icloud.com>2025-02-12 17:38:32 +0100
commit989893d2ac4086b1c89869c258bc138793a7ea8e (patch)
tree03a6162ceb63f1a3cb3aa30b7b9868c1e68bbd52 /dev/Kernel/HALKit/AMD64/HalPagingMgrAMD64.cc
parent52f882514384c6be00752be0dca9bd511db9d450 (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.cc20
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;