summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAmlal <amlal@el-mahrouss-logic.com>2024-09-12 11:15:53 +0200
committerAmlal <amlal@el-mahrouss-logic.com>2024-09-12 11:15:53 +0200
commit700cfd8d6363cfbb1a949e9d09e83f81c9c90452 (patch)
tree760a15191415a27bae2033f742ba8234f9ff3a19
parent5b0909c413c8a3fac8fd16bf5d21bb0efdb84013 (diff)
Improve BMP allocator and add kPeDLLBase and kPeEXEBase.
Signed-off-by: Amlal <amlal@el-mahrouss-logic.com>
-rw-r--r--dev/ZKA/HALKit/AMD64/HalBMPMgr.cxx37
-rw-r--r--dev/ZKA/KernelKit/PE.hxx3
2 files changed, 33 insertions, 7 deletions
diff --git a/dev/ZKA/HALKit/AMD64/HalBMPMgr.cxx b/dev/ZKA/HALKit/AMD64/HalBMPMgr.cxx
index b38fb5ef..1e2d697c 100644
--- a/dev/ZKA/HALKit/AMD64/HalBMPMgr.cxx
+++ b/dev/ZKA/HALKit/AMD64/HalBMPMgr.cxx
@@ -27,9 +27,16 @@ namespace Kernel
{
namespace Detail
{
- struct IBitMapAllocator final
+ /// \brief Proxy Interface to allocate a bitmap.
+ class IBitMapAllocator final
{
- Bool FreeBitMap(VoidPtr page_ptr)
+ public:
+ explicit IBitMapAllocator() = default;
+ ~IBitMapAllocator() = default;
+
+ ZKA_COPY_DELETE(IBitMapAllocator);
+
+ auto IsBitMap(VoidPtr page_ptr) -> Bool
{
if (!page_ptr)
return No;
@@ -40,10 +47,20 @@ namespace Kernel
ptr_bit_set[cBitMapMagIdx] != cBitMpMagic)
return No;
+ return Yes;
+ }
+
+ auto FreeBitMap(VoidPtr page_ptr) -> Bool
+ {
+ if (this->IsBitMap(page_ptr) == No)
+ return No;
+
+ UIntPtr* ptr_bit_set = reinterpret_cast<UIntPtr*>(page_ptr);
+
ptr_bit_set[cBitMapMagIdx] = cBitMpMagic;
ptr_bit_set[cBitMapUsedIdx] = No;
- this->PrintStatus(ptr_bit_set);
+ this->GetBitMapStatus(ptr_bit_set);
mm_map_page(ptr_bit_set, ~eFlagsPresent);
mm_map_page(ptr_bit_set, ~eFlagsRw);
@@ -54,7 +71,7 @@ namespace Kernel
/// @brief Iterate over availables pages for a free one.
/// @return The new address which was found.
- VoidPtr FindBitMap(VoidPtr base_ptr, SizeT size, Bool rw, Bool user) noexcept
+ auto FindBitMap(VoidPtr base_ptr, SizeT size, Bool rw, Bool user) -> VoidPtr
{
auto base = reinterpret_cast<UIntPtr>(base_ptr);
@@ -71,7 +88,7 @@ namespace Kernel
ptr_bit_set[cBitMapSizeIdx] = size;
ptr_bit_set[cBitMapUsedIdx] = Yes;
- this->PrintStatus(ptr_bit_set);
+ this->GetBitMapStatus(ptr_bit_set);
return (VoidPtr)ptr_bit_set;
}
@@ -85,7 +102,7 @@ namespace Kernel
ptr_bit_set[cBitMapSizeIdx] = size;
ptr_bit_set[cBitMapUsedIdx] = Yes;
- this->PrintStatus(ptr_bit_set);
+ this->GetBitMapStatus(ptr_bit_set);
return (VoidPtr)ptr_bit_set;
}
@@ -100,8 +117,14 @@ namespace Kernel
}
/// @brief Print Bitmap status
- Void PrintStatus(UIntPtr* ptr_bit_set)
+ auto GetBitMapStatus(UIntPtr* ptr_bit_set) -> Void
{
+ if (!this->IsBitMap(ptr_bit_set))
+ {
+ kcout << "Not a BMP: " << hex_number((UIntPtr)ptr_bit_set) << endl;
+ return;
+ }
+
kcout << "Magic Number: " << hex_number(ptr_bit_set[cBitMapMagIdx]) << endl;
kcout << "Allocated: " << (ptr_bit_set[cBitMapUsedIdx] ? "Yes" : "No") << endl;
kcout << "Size of pointer (B): " << number(ptr_bit_set[cBitMapSizeIdx]) << endl;
diff --git a/dev/ZKA/KernelKit/PE.hxx b/dev/ZKA/KernelKit/PE.hxx
index 4bf3cf9c..bab723ef 100644
--- a/dev/ZKA/KernelKit/PE.hxx
+++ b/dev/ZKA/KernelKit/PE.hxx
@@ -18,6 +18,9 @@
#define kPeMagic 0x00004550
+#define kPeDLLBase 0x4000000
+#define kPeEXEBase 0x1000000
+
#define kMagPE32 0x010b
#define kMagPE64 0x020b