From 4a9b18d4fc40aae00dc8c658ecf28bee73c4643a Mon Sep 17 00:00:00 2001 From: Amlal Date: Wed, 2 Oct 2024 09:07:16 +0200 Subject: IMP: Updated Kernel with refactors and fixes. - Fix HalPagingMgr.cxx, use a ZKA_PDE* struct before accessing PTE. - Refactor Kernel files and refactor ATA driver. Signed-off-by: Amlal --- dev/zka/HALKit/AMD64/HalPagingMgr.cxx | 4 +- dev/zka/HALKit/AMD64/PCI/DMA.cxx | 82 ++++++++++++++++++++++++++++++++ dev/zka/HALKit/AMD64/PCI/Dma.cxx | 82 -------------------------------- dev/zka/HALKit/AMD64/Storage/ATA-PIO.cxx | 6 +-- 4 files changed, 86 insertions(+), 88 deletions(-) create mode 100644 dev/zka/HALKit/AMD64/PCI/DMA.cxx delete mode 100644 dev/zka/HALKit/AMD64/PCI/Dma.cxx (limited to 'dev/zka/HALKit') diff --git a/dev/zka/HALKit/AMD64/HalPagingMgr.cxx b/dev/zka/HALKit/AMD64/HalPagingMgr.cxx index db27aaf5..06a8b7d2 100644 --- a/dev/zka/HALKit/AMD64/HalPagingMgr.cxx +++ b/dev/zka/HALKit/AMD64/HalPagingMgr.cxx @@ -114,9 +114,9 @@ namespace Kernel::HAL UInt64 pt_entry = (pt_base + pt_index * cPmlEntrySize); // Lastly, grab the pte entry. - ZKA_PTE* pte_struct = reinterpret_cast(pt_entry); + ZKA_PDE* pte_struct = reinterpret_cast(pt_base); - return mmi_map_page_table_entry(virtual_address, flags, pte_struct); + return mmi_map_page_table_entry(virtual_address, flags, pte_struct->fEntries[pt_entry]); } /// @brief Maps flags for a specific pte. diff --git a/dev/zka/HALKit/AMD64/PCI/DMA.cxx b/dev/zka/HALKit/AMD64/PCI/DMA.cxx new file mode 100644 index 00000000..d40e0e6d --- /dev/null +++ b/dev/zka/HALKit/AMD64/PCI/DMA.cxx @@ -0,0 +1,82 @@ +/* ------------------------------------------- + + Copyright ZKA Technologies. + +------------------------------------------- */ + +#include + +namespace Kernel +{ + DMAWrapper::operator bool() + { + return fAddress; + } + + bool DMAWrapper::operator!() + { + return !fAddress; + } + + Boolean DMAWrapper::Check(UIntPtr offset) const + { + if (!fAddress) + return false; + if (offset == 0) + return true; + + kcout << "[DMAWrapper::IsIn] Checking offset..\n"; + return reinterpret_cast(fAddress) >= offset; + } + + bool DMAWrapper::Write(const UIntPtr& bit, const UIntPtr& offset) + { + if (!fAddress) + return false; + + kcout << "[DMAWrapper::Write] Writing at address..\n"; + + auto addr = + (volatile UIntPtr*)(reinterpret_cast(fAddress) + offset); + *addr = bit; + + return true; + } + + UIntPtr DMAWrapper::Read(const UIntPtr& offset) + { + kcout << "[DMAWrapper::Read] checking fAddress..\n"; + if (!fAddress) + return 0; + + kcout << "[DMAWrapper::Read] Reading fAddress..\n"; + return *(volatile UIntPtr*)(reinterpret_cast(fAddress) + offset); + ; + } + + UIntPtr DMAWrapper::operator[](const UIntPtr& offset) + { + return this->Read(offset); + } + + OwnPtr> DMAFactory::Construct(OwnPtr& dma) + { + if (!dma) + return {}; + + OwnPtr> dmaOwnPtr = + make_ptr, char*>(reinterpret_cast(dma->fAddress)); + + if (!dmaOwnPtr) + return {}; + + kcout << "Returning the new OwnPtr>!\r"; + return dmaOwnPtr; + } + + DMAWrapper& DMAWrapper::operator=(voidPtr Ptr) + { + fAddress = Ptr; + return *this; + } +} // namespace Kernel diff --git a/dev/zka/HALKit/AMD64/PCI/Dma.cxx b/dev/zka/HALKit/AMD64/PCI/Dma.cxx deleted file mode 100644 index bf1730d8..00000000 --- a/dev/zka/HALKit/AMD64/PCI/Dma.cxx +++ /dev/null @@ -1,82 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#include - -namespace Kernel -{ - DMAWrapper::operator bool() - { - return fAddress; - } - - bool DMAWrapper::operator!() - { - return !fAddress; - } - - Boolean DMAWrapper::Check(UIntPtr offset) const - { - if (!fAddress) - return false; - if (offset == 0) - return true; - - kcout << "[DMAWrapper::IsIn] Checking offset..\n"; - return reinterpret_cast(fAddress) >= offset; - } - - bool DMAWrapper::Write(const UIntPtr& bit, const UIntPtr& offset) - { - if (!fAddress) - return false; - - kcout << "[DMAWrapper::Write] Writing at address..\n"; - - auto addr = - (volatile UIntPtr*)(reinterpret_cast(fAddress) + offset); - *addr = bit; - - return true; - } - - UIntPtr DMAWrapper::Read(const UIntPtr& offset) - { - kcout << "[DMAWrapper::Read] checking fAddress..\n"; - if (!fAddress) - return 0; - - kcout << "[DMAWrapper::Read] Reading fAddress..\n"; - return *(volatile UIntPtr*)(reinterpret_cast(fAddress) + offset); - ; - } - - UIntPtr DMAWrapper::operator[](const UIntPtr& offset) - { - return this->Read(offset); - } - - OwnPtr> DMAFactory::Construct(OwnPtr& dma) - { - if (!dma) - return {}; - - OwnPtr> dmaOwnPtr = - make_ptr, char*>(reinterpret_cast(dma->fAddress)); - - if (!dmaOwnPtr) - return {}; - - kcout << "Returning the new OwnPtr>!\r"; - return dmaOwnPtr; - } - - DMAWrapper& DMAWrapper::operator=(voidPtr Ptr) - { - fAddress = Ptr; - return *this; - } -} // namespace Kernel diff --git a/dev/zka/HALKit/AMD64/Storage/ATA-PIO.cxx b/dev/zka/HALKit/AMD64/Storage/ATA-PIO.cxx index e09a4277..2d02d89a 100644 --- a/dev/zka/HALKit/AMD64/Storage/ATA-PIO.cxx +++ b/dev/zka/HALKit/AMD64/Storage/ATA-PIO.cxx @@ -68,8 +68,6 @@ Boolean drv_std_init(UInt16 Bus, UInt8 Drive, UInt16& OutBus, UInt8& OutMaster) drv_std_select(IO); - kcout << "Initializing drive...\r"; - ATAInit_Retry: // Bus init, NEIN bit. Out8(IO + ATA_REG_NEIN, 1); @@ -80,7 +78,7 @@ ATAInit_Retry: if (statRdy & ATA_SR_ERR) { - kcout << "Failing drive...\r"; + kcout << "ERROR: ATA DRIVE RETURNED ERROR BIT! ABORTING...\r"; return false; } @@ -107,7 +105,7 @@ ATAInit_Retry: OutMaster = (Bus == ATA_PRIMARY_IO) ? ATA_MASTER : ATA_SLAVE; - kcout << "Created IDE module.\r"; + kcout << "INFO: INITIALIZED ATA DRIVE!\r"; return true; } -- cgit v1.2.3