From 7855b98f7cbe83d77f1625f7b5017060b97e5b75 Mon Sep 17 00:00:00 2001 From: Amlal El Mahrouss Date: Mon, 10 Mar 2025 05:13:55 +0100 Subject: IMPL: I/O subsystem improvements and Dyld subsystem improvements. - Add make_ports for IO.h - Include PCI.h in Express.h - Use this in DMA.inl - Refactor NE_DLL_OBJECT to NE_DYLIB_OBJECT in IDylibObject.h Signed-off-by: Amlal El Mahrouss --- dev/Kernel/KernelKit/IDylibObject.h | 2 +- dev/Kernel/KernelKit/IPEFDylibObject.h | 2 +- dev/Kernel/KernelKit/PCI/DMA.inl | 4 +-- dev/Kernel/KernelKit/PCI/Express.h | 1 + dev/Kernel/KernelKit/PCI/IO-Impl-AMD64.inl | 54 ------------------------------ dev/Kernel/KernelKit/PCI/IO.h | 20 +++++++++-- dev/Kernel/KernelKit/PCI/IOArray+AMD64.inl | 54 ++++++++++++++++++++++++++++++ 7 files changed, 77 insertions(+), 60 deletions(-) delete mode 100644 dev/Kernel/KernelKit/PCI/IO-Impl-AMD64.inl create mode 100644 dev/Kernel/KernelKit/PCI/IOArray+AMD64.inl (limited to 'dev/Kernel/KernelKit') diff --git a/dev/Kernel/KernelKit/IDylibObject.h b/dev/Kernel/KernelKit/IDylibObject.h index 8e7c451a..c872b86f 100644 --- a/dev/Kernel/KernelKit/IDylibObject.h +++ b/dev/Kernel/KernelKit/IDylibObject.h @@ -12,7 +12,7 @@ #include #include -#define NE_DLL_OBJECT : public IDylibObject +#define NE_DYLIB_OBJECT : public IDylibObject namespace NeOS { diff --git a/dev/Kernel/KernelKit/IPEFDylibObject.h b/dev/Kernel/KernelKit/IPEFDylibObject.h index 67f36985..20f87410 100644 --- a/dev/Kernel/KernelKit/IPEFDylibObject.h +++ b/dev/Kernel/KernelKit/IPEFDylibObject.h @@ -22,7 +22,7 @@ namespace NeOS * @brief Shared Library class * Load library from this class */ - class IPEFDylibObject final NE_DLL_OBJECT + class IPEFDylibObject final NE_DYLIB_OBJECT { public: explicit IPEFDylibObject() = default; diff --git a/dev/Kernel/KernelKit/PCI/DMA.inl b/dev/Kernel/KernelKit/PCI/DMA.inl index 0ea2c343..d9c6e551 100644 --- a/dev/Kernel/KernelKit/PCI/DMA.inl +++ b/dev/Kernel/KernelKit/PCI/DMA.inl @@ -9,12 +9,12 @@ namespace NeOS template T* DMAWrapper::operator->() { - return fAddress; + return this->fAddress; } template T* DMAWrapper::Get(const UIntPtr offset) { - return reinterpret_cast((UIntPtr)fAddress + offset); + return reinterpret_cast((UIntPtr)this->fAddress + offset); } } // namespace NeOS diff --git a/dev/Kernel/KernelKit/PCI/Express.h b/dev/Kernel/KernelKit/PCI/Express.h index d949fde8..c437a1cb 100644 --- a/dev/Kernel/KernelKit/PCI/Express.h +++ b/dev/Kernel/KernelKit/PCI/Express.h @@ -7,5 +7,6 @@ #pragma once #include +#include #define PCI_EXPRESS_BUS_COUNT (4096) diff --git a/dev/Kernel/KernelKit/PCI/IO-Impl-AMD64.inl b/dev/Kernel/KernelKit/PCI/IO-Impl-AMD64.inl deleted file mode 100644 index 0bac35bc..00000000 --- a/dev/Kernel/KernelKit/PCI/IO-Impl-AMD64.inl +++ /dev/null @@ -1,54 +0,0 @@ -/* ------------------------------------------- - - Copyright (C) 2024-2025, Amlal EL Mahrouss, all rights reserved. - - File: IO-Impl-AMD64.h - Purpose: I/O for AMD64. - - Revision History: - - 30/01/24: Add file. (amlel) - 02/02/24: Update I/O routines. (amlel) - -------------------------------------------- */ - -namespace NeOS -{ - template - template - T IOArray::In(SizeT index) - { - switch (sizeof(T)) - { -#ifdef __NE_AMD64__ - case 4: - return HAL::rt_in32(fPorts[index].Leak()); - case 2: - return HAL::rt_in16(fPorts[index].Leak()); - case 1: - return HAL::rt_in8(fPorts[index].Leak()); -#endif - default: - return 0xFFFF; - } - } - - template - template - void IOArray::Out(SizeT index, T value) - { - switch (sizeof(T)) - { -#ifdef __NE_AMD64__ - case 4: - HAL::rt_out32(fPorts[index].Leak(), value); - case 2: - HAL::rt_out16(fPorts[index].Leak(), value); - case 1: - HAL::rt_out8(fPorts[index].Leak(), value); -#endif - default: - break; - } - } -} // namespace NeOS diff --git a/dev/Kernel/KernelKit/PCI/IO.h b/dev/Kernel/KernelKit/PCI/IO.h index b6d491ce..1d60df8e 100644 --- a/dev/Kernel/KernelKit/PCI/IO.h +++ b/dev/Kernel/KernelKit/PCI/IO.h @@ -25,6 +25,7 @@ namespace NeOS : fPorts(ports) { } + ~IOArray() { } @@ -49,11 +50,26 @@ namespace NeOS Array fPorts; }; - using IOArray16 = IOArray<16>; + inline constexpr UInt16 kMaxPorts = 16; + + using IOArray16 = IOArray; + + template + inline Array make_ports(UShort base) + { + Array ports; + + for (UShort i = 0; i < Sz; ++i) + { + ports[i] = base + i; + } + + return ports; + } } // namespace NeOS #ifdef __x86_64__ -#include +#include #else #error Please provide platform specific code for the I/O #endif // ifdef __x86_64__ diff --git a/dev/Kernel/KernelKit/PCI/IOArray+AMD64.inl b/dev/Kernel/KernelKit/PCI/IOArray+AMD64.inl new file mode 100644 index 00000000..2630fa98 --- /dev/null +++ b/dev/Kernel/KernelKit/PCI/IOArray+AMD64.inl @@ -0,0 +1,54 @@ +/* ------------------------------------------- + + Copyright (C) 2024-2025, Amlal EL Mahrouss, all rights reserved. + + File: IO-Impl-AMD64.h + Purpose: I/O for AMD64. + + Revision History: + + 30/01/24: Add file. (amlel) + 02/02/24: Update I/O routines. (amlel) + +------------------------------------------- */ + +namespace NeOS +{ + template + template + T IOArray::In(SizeT index) + { + switch (sizeof(T)) + { +#ifdef __NE_AMD64__ + case 4: + return HAL::rt_in32(fPorts[index].Leak()); + case 2: + return HAL::rt_in16(fPorts[index].Leak()); + case 1: + return HAL::rt_in8(fPorts[index].Leak()); +#endif + default: + return 0xFFFF; + } + } + + template + template + void IOArray::Out(SizeT index, T value) + { + switch (sizeof(T)) + { +#ifdef __NE_AMD64__ + case 4: + HAL::rt_out32(fPorts[index].Leak(), value); + case 2: + HAL::rt_out16(fPorts[index].Leak(), value); + case 1: + HAL::rt_out8(fPorts[index].Leak(), value); +#endif + default: + break; + } + } +} // namespace NeOS \ No newline at end of file -- cgit v1.2.3