// Copyright 2024-2025, Amlal El Mahrouss (amlal@nekernel.org) // Licensed under the Apache License, Version 2.0 (see LICENSE file) // Official repository: https://github.com/ne-foss-org/nekernel #include #include namespace Kernel { DMAWrapper::operator bool() { return this->fAddress; } bool DMAWrapper::operator!() { return !this->fAddress; } Boolean DMAWrapper::Check(UIntPtr offset) const { if (!this->fAddress) return false; if (offset == 0) return false; kout << "[DMAWrapper::IsIn] Checking offset...\r"; return reinterpret_cast(this->fAddress) >= offset; } bool DMAWrapper::Write(UIntPtr& bit, const UInt32& offset) { kout << "[DMAWrapper::Read] Checking this->fAddress...\r"; if (!this->fAddress) return false; (Void)(kout << "[DMAWrapper::Write] Writing at address: " << hex_number(reinterpret_cast(this->fAddress) + offset) << kendl); ke_dma_write(reinterpret_cast(this->fAddress), offset, bit); return true; } UIntPtr DMAWrapper::Read(const UInt32& offset) { kout << "[DMAWrapper::Read] Checking this->fAddress...\r"; if (!this->fAddress) return ~0; (Void)(kout << "[DMAWrapper::Write] Writing at address: " << hex_number(reinterpret_cast(this->fAddress) + offset) << kendl); return (UIntPtr) ke_dma_read(reinterpret_cast(this->fAddress), offset); } UIntPtr DMAWrapper::operator[](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 {}; kout << "Returning the new OwnPtr>!\r"; return dmaOwnPtr; } DMAWrapper& DMAWrapper::operator=(voidPtr Ptr) { this->fAddress = Ptr; return *this; } } // namespace Kernel