diff options
| author | Amlal El Mahrouss <amlal@nekernel.org> | 2025-06-15 16:03:38 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-06-15 16:03:38 +0200 |
| commit | eb9df5eea339812513c25a8d3b2eeb03c633e7ac (patch) | |
| tree | efcdaaa25d08daadcd27e0597a0fb20defc49a23 /dev/kernel/DmaKit | |
| parent | 6511afbf405c31513bc88ab06bca58218610a994 (diff) | |
| parent | f7e5542dc13519cc78c204b4062acb0b71296a58 (diff) | |
Merge pull request #41 from nekernel-org/dev
NeKernel v0.0.3e1
Diffstat (limited to 'dev/kernel/DmaKit')
| -rw-r--r-- | dev/kernel/DmaKit/DmaPool.h | 25 |
1 files changed, 19 insertions, 6 deletions
diff --git a/dev/kernel/DmaKit/DmaPool.h b/dev/kernel/DmaKit/DmaPool.h index 9decb3f1..ada8299e 100644 --- a/dev/kernel/DmaKit/DmaPool.h +++ b/dev/kernel/DmaKit/DmaPool.h @@ -2,19 +2,28 @@ Copyright (C) 2025, Amlal El Mahrouss , all rights reserved. - File: FileMgr.h - Purpose: Kernel file manager. + File: DmaPool.h + Purpose: Dma Pool Manager. ------------------------------------------- */ #pragma once -#include <HALKit/AMD64/Processor.h> #include <KernelKit/DebugOutput.h> #ifdef __NE_AMD64__ +#include <HALKit/AMD64/Processor.h> +#define kNeDMAPoolStart (0x1000000) +#define kNeDMAPoolSize (0x1000000) +#elif defined(__NE_ARM64__) +#include <HALKit/ARM64/Processor.h> + +/// @todo what reference offset shall we use? #define kNeDMAPoolStart (0x1000000) #define kNeDMAPoolSize (0x1000000) +#endif + +#define kNeDMABestAlign __BIGGEST_ALIGNMENT__ namespace Kernel { /// @brief DMA pool base pointer, here we're sure that AHCI or whatever tricky standard sees it. @@ -31,13 +40,18 @@ inline VoidPtr rtl_dma_alloc(SizeT size, SizeT align) { return nullptr; } + /// Check alignement according to architecture. + if ((align % kNeDMABestAlign) != 0) { + return nullptr; + } + UIntPtr addr = (UIntPtr) kDmaPoolPtr; /// here we just align the address according to a `align` variable, i'd rather be a power of two /// really. addr = (addr + (align - 1)) & ~(align - 1); - if ((addr + size) >= reinterpret_cast<UIntPtr>(kDmaPoolEnd)) { + if ((addr + size) > reinterpret_cast<UIntPtr>(kDmaPoolEnd)) { err_global_get() = kErrorDmaExhausted; return nullptr; } @@ -84,5 +98,4 @@ inline Void rtl_dma_flush(VoidPtr ptr, SizeT size_buffer) { HAL::mm_memory_fence((VoidPtr) ((UInt8*) ptr + buf_idx)); } } -} // namespace Kernel -#endif
\ No newline at end of file +} // namespace Kernel
\ No newline at end of file |
