summaryrefslogtreecommitdiffhomepage
path: root/dev/kernel
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal@nekernel.org>2025-04-18 18:24:44 +0200
committerAmlal El Mahrouss <amlal@nekernel.org>2025-04-18 18:27:15 +0200
commitb69c498953dc47900e6ccdd0f501727480836f23 (patch)
tree58411ba65eed2933d97657e16e85fab17f12ea01 /dev/kernel
parentc5b4c98fadd89fd114520e201e34a58a78025344 (diff)
kernel, IMP: GfxKit: GraphicsKit.
kernel, IMP: StorageKit: Remove usage of cleanup method on AHCI, DMA, and PIO. Signed-off-by: Amlal El Mahrouss <amlal@nekernel.org>
Diffstat (limited to 'dev/kernel')
-rw-r--r--dev/kernel/GfxKit/Gfx.h51
-rw-r--r--dev/kernel/HALKit/AMD64/Storage/AHCI+Generic.cc3
-rw-r--r--dev/kernel/HALKit/AMD64/Storage/PIO+Generic.cc3
-rw-r--r--dev/kernel/StorageKit/AHCI.h7
-rw-r--r--dev/kernel/StorageKit/ATA.h4
-rw-r--r--dev/kernel/StorageKit/PRDT.h4
-rw-r--r--dev/kernel/amd64-ci.make2
-rw-r--r--dev/kernel/amd64-desktop.make2
-rw-r--r--dev/kernel/src/Gfx/FBDeviceInterface.cc58
-rw-r--r--dev/kernel/src/Storage/AHCIDeviceInterface.cc13
-rw-r--r--dev/kernel/src/Storage/ATADeviceInterface.cc12
11 files changed, 126 insertions, 33 deletions
diff --git a/dev/kernel/GfxKit/Gfx.h b/dev/kernel/GfxKit/Gfx.h
new file mode 100644
index 00000000..ce5751dc
--- /dev/null
+++ b/dev/kernel/GfxKit/Gfx.h
@@ -0,0 +1,51 @@
+/* -------------------------------------------
+
+ Copyright (C) 2025, Amlal El Mahrouss, all rights reserved.
+
+------------------------------------------- */
+
+#pragma once
+
+#include <modules/CoreGfx/CoreGfx.h>
+#include <modules/CoreGfx/TextGfx.h>
+
+namespace Kernel
+{
+ class FBDeviceInterface;
+ struct FBDevicePacket;
+
+ /// @brief Framebuffer device interface packet.
+ /// @details This structure is used to send and receive data from the framebuffer device.
+ /// @note The structure is packed to ensure that the data is aligned correctly for the device.
+ struct PACKED FBDevicePacket final
+ {
+ UInt32 fX;
+ UInt32 fY;
+ UInt32 fWidth;
+ UInt32 fHeight;
+ UInt32 fColor;
+ UInt32 fFlags;
+ };
+
+ /// @brief Framebuffer device interface.
+ /// @details This class is used to send and receive data from the framebuffer device.
+ /// @note The class is derived from the IDeviceObject class.
+ class FBDeviceInterface NE_DEVICE<FBDevicePacket*>
+ {
+ public:
+ explicit FBDeviceInterface(void (*out)(IDeviceObject* self, FBDevicePacket* out),
+ void (*in)(IDeviceObject* self, FBDevicePacket* in));
+
+ virtual ~FBDeviceInterface() override;
+
+ public:
+ FBDeviceInterface& operator=(const FBDeviceInterface&) = default;
+ FBDeviceInterface(const FBDeviceInterface&) = default;
+
+ const Char* Name() const override;
+
+ public:
+ FBDeviceInterface& operator<<(FBDevicePacket* Data) override;
+ FBDeviceInterface& operator>>(FBDevicePacket* Data) override;
+ };
+} // namespace Kernel
diff --git a/dev/kernel/HALKit/AMD64/Storage/AHCI+Generic.cc b/dev/kernel/HALKit/AMD64/Storage/AHCI+Generic.cc
index 9c8f95bc..08fd02ab 100644
--- a/dev/kernel/HALKit/AMD64/Storage/AHCI+Generic.cc
+++ b/dev/kernel/HALKit/AMD64/Storage/AHCI+Generic.cc
@@ -479,8 +479,7 @@ namespace Kernel
return ErrorOr<AHCIDeviceInterface>(kErrorDisk);
AHCIDeviceInterface device(Detail::sk_io_read_ahci,
- Detail::sk_io_write_ahci,
- nullptr);
+ Detail::sk_io_write_ahci);
device.SetPortsImplemented(kSATAPortsImplemented);
device.SetIndex(drv_index);
diff --git a/dev/kernel/HALKit/AMD64/Storage/PIO+Generic.cc b/dev/kernel/HALKit/AMD64/Storage/PIO+Generic.cc
index cc8c92d8..257dd5c8 100644
--- a/dev/kernel/HALKit/AMD64/Storage/PIO+Generic.cc
+++ b/dev/kernel/HALKit/AMD64/Storage/PIO+Generic.cc
@@ -252,8 +252,7 @@ namespace Kernel
{
/// here we don't check if we probed ATA, since we'd need to grab IO after that.
ATADeviceInterface device(Detail::sk_io_read_pio,
- Detail::sk_io_write_pio,
- nullptr);
+ Detail::sk_io_write_pio);
device.SetIndex(drv_index);
diff --git a/dev/kernel/StorageKit/AHCI.h b/dev/kernel/StorageKit/AHCI.h
index 7e2eaf68..68a42c46 100644
--- a/dev/kernel/StorageKit/AHCI.h
+++ b/dev/kernel/StorageKit/AHCI.h
@@ -12,12 +12,14 @@
namespace Kernel
{
+ /// @brief AHCIDeviceInterface class
+ /// @details This class is used to send and receive data from the AHCI device.
+ /// @note The class is derived from the IDeviceObject class.
class AHCIDeviceInterface NE_DEVICE<MountpointInterface*>
{
public:
explicit AHCIDeviceInterface(void (*out)(IDeviceObject* self, MountpointInterface* out),
- void (*in)(IDeviceObject* self, MountpointInterface* in),
- void (*cleanup)(void));
+ void (*in)(IDeviceObject* self, MountpointInterface* in));
virtual ~AHCIDeviceInterface() override;
@@ -40,7 +42,6 @@ namespace Kernel
AHCIDeviceInterface& operator>>(MountpointInterface* Data) override;
private:
- Void (*fCleanup)(Void) = {nullptr};
UInt16 fPortsImplemented{0U};
UInt32 fDriveIndex{0U};
};
diff --git a/dev/kernel/StorageKit/ATA.h b/dev/kernel/StorageKit/ATA.h
index 917fa12b..04cf88d7 100644
--- a/dev/kernel/StorageKit/ATA.h
+++ b/dev/kernel/StorageKit/ATA.h
@@ -18,8 +18,7 @@ namespace Kernel
{
public:
explicit ATADeviceInterface(void (*Out)(IDeviceObject*, MountpointInterface* outpacket),
- void (*In)(IDeviceObject*, MountpointInterface* inpacket),
- void (*Cleanup)(void));
+ void (*In)(IDeviceObject*, MountpointInterface* inpacket));
virtual ~ATADeviceInterface();
@@ -43,7 +42,6 @@ namespace Kernel
Void SetIndex(const UInt32& drv);
private:
- void (*fCleanup)(void) = {nullptr};
UInt32 fDriveIndex{0U};
UInt16 fIO, fMaster{0U};
};
diff --git a/dev/kernel/StorageKit/PRDT.h b/dev/kernel/StorageKit/PRDT.h
index 729b6e96..dde9c208 100644
--- a/dev/kernel/StorageKit/PRDT.h
+++ b/dev/kernel/StorageKit/PRDT.h
@@ -15,7 +15,7 @@
namespace Kernel
{
/// @brief Tranfer information about PRD.
- enum kPRDTTransfer
+ enum
{
kPRDTTransferInProgress,
kPRDTTransferIsDone,
@@ -23,7 +23,7 @@ namespace Kernel
};
/// @brief Physical Region Descriptor Table.
- struct PRDT
+ struct PRDT final
{
UInt32 fPhysAddress;
UInt32 fSectorCount;
diff --git a/dev/kernel/amd64-ci.make b/dev/kernel/amd64-ci.make
index e9a4d4b0..7748fc7c 100644
--- a/dev/kernel/amd64-ci.make
+++ b/dev/kernel/amd64-ci.make
@@ -48,7 +48,7 @@ WINDRES=x86_64-w64-mingw32-windres
.PHONY: nekernel-amd64-epm
nekernel-amd64-epm: clean
$(WINDRES) kernel_rsrc.rsrc -O coff -o kernel_rsrc.obj
- $(CXX) $(CCFLAGS) $(DISK_DRV) $(DEBUG_MACRO) $(wildcard src/*.cc) $(wildcard HALKit/AMD64/PCI/*.cc) $(wildcard src/Network/*.cc) $(wildcard src/Storage/*.cc) $(wildcard src/FS/*.cc) $(wildcard HALKit/AMD64/Storage/*.cc) $(wildcard HALKit/AMD64/*.cc) $(wildcard src/Swap/*.cc) $(wildcard HALKit/AMD64/*.s)
+ $(CXX) $(CCFLAGS) $(DISK_DRV) $(DEBUG_MACRO) $(wildcard src/*.cc) $(wildcard src/Gfx/*.cc) $(wildcard HALKit/AMD64/PCI/*.cc) $(wildcard src/Network/*.cc) $(wildcard src/Storage/*.cc) $(wildcard src/FS/*.cc) $(wildcard HALKit/AMD64/Storage/*.cc) $(wildcard HALKit/AMD64/*.cc) $(wildcard src/Swap/*.cc) $(wildcard HALKit/AMD64/*.s)
$(ASM) $(ASMFLAGS) HALKit/AMD64/HalInterruptAPI.asm
$(ASM) $(ASMFLAGS) HALKit/AMD64/HalCommonAPI.asm
$(ASM) $(ASMFLAGS) HALKit/AMD64/HalBootHeader.asm
diff --git a/dev/kernel/amd64-desktop.make b/dev/kernel/amd64-desktop.make
index 02b0a3b4..9993796c 100644
--- a/dev/kernel/amd64-desktop.make
+++ b/dev/kernel/amd64-desktop.make
@@ -50,7 +50,7 @@ WINDRES=x86_64-w64-mingw32-windres
.PHONY: nekernel-amd64-epm
nekernel-amd64-epm: clean
$(WINDRES) kernel_rsrc.rsrc -O coff -o kernel_rsrc.obj
- $(CXX) $(CCFLAGS) $(DISK_DRV) $(DEBUG_MACRO) $(wildcard src/*.cc) $(wildcard HALKit/AMD64/PCI/*.cc) $(wildcard src/Network/*.cc) $(wildcard src/Storage/*.cc) $(wildcard src/FS/*.cc) $(wildcard HALKit/AMD64/Storage/*.cc) $(wildcard HALKit/AMD64/*.cc) $(wildcard src/Swap/*.cc) $(wildcard HALKit/AMD64/*.s)
+ $(CXX) $(CCFLAGS) $(DISK_DRV) $(DEBUG_MACRO) $(wildcard src/*.cc) $(wildcard src/Gfx/*.cc) $(wildcard HALKit/AMD64/PCI/*.cc) $(wildcard src/Network/*.cc) $(wildcard src/Storage/*.cc) $(wildcard src/FS/*.cc) $(wildcard HALKit/AMD64/Storage/*.cc) $(wildcard HALKit/AMD64/*.cc) $(wildcard src/Swap/*.cc) $(wildcard HALKit/AMD64/*.s)
$(ASM) $(ASMFLAGS) HALKit/AMD64/HalInterruptAPI.asm
$(ASM) $(ASMFLAGS) HALKit/AMD64/HalCommonAPI.asm
$(ASM) $(ASMFLAGS) HALKit/AMD64/HalBootHeader.asm
diff --git a/dev/kernel/src/Gfx/FBDeviceInterface.cc b/dev/kernel/src/Gfx/FBDeviceInterface.cc
new file mode 100644
index 00000000..a9b2be29
--- /dev/null
+++ b/dev/kernel/src/Gfx/FBDeviceInterface.cc
@@ -0,0 +1,58 @@
+/* -------------------------------------------
+
+ Copyright (C) 2024-2025, Amlal El Mahrouss, all rights reserved.
+
+------------------------------------------- */
+
+#include <GfxKit/Gfx.h>
+
+using namespace Kernel;
+
+/// @brief Class constructor
+/// @param Out Drive output
+/// @param In Drive input
+/// @param Cleanup Drive cleanup.
+FBDeviceInterface::FBDeviceInterface(void (*out)(IDeviceObject* self, FBDevicePacket* outpacket),
+ void (*in)(IDeviceObject* self, FBDevicePacket* inpacket))
+ : IDeviceObject(out, in)
+{
+}
+
+/// @brief Class desctructor
+FBDeviceInterface::~FBDeviceInterface() = default;
+
+/// @brief Output operator.
+/// @param mnt the disk mountpoint.
+/// @return the class itself after operation.
+FBDeviceInterface& FBDeviceInterface::operator<<(FBDevicePacket* pckt)
+{
+ if (!pckt)
+ return *this;
+
+ FBDrawInRegion(pckt->fColor, pckt->fHeight, pckt->fWidth, pckt->fY, pckt->fX);
+
+ return *this;
+}
+
+/// @brief Input operator.
+/// @param mnt the disk mountpoint.
+/// @return the class itself after operation.
+FBDeviceInterface& FBDeviceInterface::operator>>(FBDevicePacket* pckt)
+{
+ if (!pckt)
+ return *this;
+
+ pckt->fColor = *(((Kernel::UInt32*)(kHandoverHeader->f_GOP.f_The +
+ 4 * kHandoverHeader->f_GOP.f_PixelPerLine *
+ pckt->fX +
+ 4 * pckt->fY)));
+
+ return *this;
+}
+
+/// @brief Returns the name of the device interface.
+/// @return it's name as a string.
+const Char* FBDeviceInterface::Name() const
+{
+ return "/dev/fb{}";
+} \ No newline at end of file
diff --git a/dev/kernel/src/Storage/AHCIDeviceInterface.cc b/dev/kernel/src/Storage/AHCIDeviceInterface.cc
index 1798e9a9..c5f43bf6 100644
--- a/dev/kernel/src/Storage/AHCIDeviceInterface.cc
+++ b/dev/kernel/src/Storage/AHCIDeviceInterface.cc
@@ -13,20 +13,13 @@ using namespace Kernel;
/// @param In Drive input
/// @param Cleanup Drive cleanup.
AHCIDeviceInterface::AHCIDeviceInterface(void (*out)(IDeviceObject* self, MountpointInterface* outpacket),
- void (*in)(IDeviceObject* self, MountpointInterface* inpacket),
- void (*cleanup)(void))
- : IDeviceObject(out, in), fCleanup(cleanup)
+ void (*in)(IDeviceObject* self, MountpointInterface* inpacket))
+ : IDeviceObject(out, in)
{
}
/// @brief Class desctructor
-AHCIDeviceInterface::~AHCIDeviceInterface()
-{
- MUST_PASS(fCleanup);
-
- if (fCleanup)
- fCleanup();
-}
+AHCIDeviceInterface::~AHCIDeviceInterface() = default;
/// @brief Returns the name of the device interface.
/// @return it's name as a string.
diff --git a/dev/kernel/src/Storage/ATADeviceInterface.cc b/dev/kernel/src/Storage/ATADeviceInterface.cc
index 2e7022a7..3fe331dd 100644
--- a/dev/kernel/src/Storage/ATADeviceInterface.cc
+++ b/dev/kernel/src/Storage/ATADeviceInterface.cc
@@ -14,19 +14,13 @@ using namespace Kernel;
/// @param Cleanup Drive cleanup.
ATADeviceInterface::ATADeviceInterface(
void (*Out)(IDeviceObject*, MountpointInterface* outpacket),
- void (*In)(IDeviceObject*, MountpointInterface* inpacket),
- void (*Cleanup)(void))
- : IDeviceObject(Out, In), fCleanup(Cleanup)
+ void (*In)(IDeviceObject*, MountpointInterface* inpacket))
+ : IDeviceObject(Out, In)
{
}
/// @brief Class desctructor
-ATADeviceInterface::~ATADeviceInterface()
-{
- MUST_PASS(fCleanup);
- if (fCleanup)
- fCleanup();
-}
+ATADeviceInterface::~ATADeviceInterface() = default;
/// @brief Returns the name of the device interface.
/// @return it's name as a string.