summaryrefslogtreecommitdiffhomepage
path: root/dev/kernel/src
diff options
context:
space:
mode:
Diffstat (limited to 'dev/kernel/src')
-rw-r--r--dev/kernel/src/DriveMgr.cc36
-rw-r--r--dev/kernel/src/FS/Ext2+FileMgr.cc14
-rw-r--r--dev/kernel/src/FS/HeFS+FileMgr.cc14
-rw-r--r--dev/kernel/src/FS/NeFS+FileMgr.cc6
-rw-r--r--dev/kernel/src/Gfx/FBDeviceInterface.cc69
-rw-r--r--dev/kernel/src/Storage/AHCIDeviceInterface.cc13
-rw-r--r--dev/kernel/src/Storage/ATADeviceInterface.cc12
7 files changed, 133 insertions, 31 deletions
diff --git a/dev/kernel/src/DriveMgr.cc b/dev/kernel/src/DriveMgr.cc
index a379ea43..f958a33f 100644
--- a/dev/kernel/src/DriveMgr.cc
+++ b/dev/kernel/src/DriveMgr.cc
@@ -8,6 +8,7 @@
#include <KernelKit/DriveMgr.h>
#include <NewKit/Utils.h>
#include <FirmwareKit/EPM.h>
+#include <FirmwareKit/GPT.h>
#include <modules/ATA/ATA.h>
#include <modules/AHCI/AHCI.h>
#include <modules/NVME/NVME.h>
@@ -170,12 +171,12 @@ namespace Kernel
trait.fInput(trait.fPacket);
- if (rt_string_cmp(((EPM_PART_BLOCK*)trait.fPacket.fPacketContent)->Magic, kEPMMagic, kEPMMagicLength) == 0)
+ if (rt_string_cmp(block_struct.Magic, kEPMMagic, kEPMMagicLength) == 0)
{
trait.fPacket.fPacketReadOnly = NO;
trait.fKind = kMassStorageDrive | kEPMDrive;
- kout << "Disk is EPM.\r";
+ kout << "Disk is EPM formatted.\r";
trait.fSectorSz = block_struct.SectorSz;
trait.fLbaEnd = block_struct.LbaEnd;
@@ -183,17 +184,34 @@ namespace Kernel
}
else
{
- trait.fPacket.fPacketReadOnly = YES;
- trait.fKind = kMassStorageDrive | kUnformattedDrive | kReadOnlyDrive;
+ GPT_PARTITION_TABLE gpt_struct;
- if (block_struct.Name[0] == 0 ||
- !rt_is_alnum(block_struct.Name[0]))
+ trait.fPacket.fPacketLba = kEPMBootBlockLba;
+ trait.fPacket.fPacketSize = sizeof(GPT_PARTITION_TABLE);
+ trait.fPacket.fPacketContent = &gpt_struct;
+
+ rt_copy_memory((VoidPtr) "fs/detect-packet", trait.fPacket.fPacketMime,
+ rt_string_len("fs/detect-packet"));
+
+ trait.fInput(trait.fPacket);
+
+ if (rt_string_cmp(gpt_struct.Signature, kMagicGPT, kMagicLenGPT) == 0)
{
- kout << "Disk partition is empty (Read Only)\r";
+ trait.fPacket.fPacketReadOnly = NO;
+ trait.fKind = kMassStorageDrive | kGPTDrive;
+
+ kout << "Disk is GPT formatted.\r";
+
+ trait.fSectorSz = gpt_struct.SizeOfEntries;
+ trait.fLbaEnd = gpt_struct.LastGPTEntry;
+ trait.fLbaStart = gpt_struct.FirstGPTEntry;
}
else
{
- (void)(kout << "Scheme Found: " << block_struct.Name << kendl);
+ kout << "Disk is unformatted.\r";
+
+ trait.fPacket.fPacketReadOnly = YES;
+ trait.fKind = kMassStorageDrive | kUnformattedDrive | kReadOnlyDrive;
}
}
@@ -212,7 +230,7 @@ namespace Kernel
{
DriveTrait trait;
- constexpr auto kMainDrive = "/media/sda/";
+ constexpr auto kMainDrive = "/media/main/";
rt_copy_memory((VoidPtr)kMainDrive, trait.fName, rt_string_len(kMainDrive));
diff --git a/dev/kernel/src/FS/Ext2+FileMgr.cc b/dev/kernel/src/FS/Ext2+FileMgr.cc
new file mode 100644
index 00000000..cb17b587
--- /dev/null
+++ b/dev/kernel/src/FS/Ext2+FileMgr.cc
@@ -0,0 +1,14 @@
+/* -------------------------------------------
+
+ Copyright (C) 2024-2025, Amlal El Mahrouss, all rights reserved.
+
+------------------------------------------- */
+
+#ifndef __NE_MINIMAL_OS__
+#ifdef __FSKIT_INCLUDES_EXT2__
+
+#include <KernelKit/FileMgr.h>
+#include <KernelKit/MemoryMgr.h>
+
+#endif // ifdef __FSKIT_INCLUDES_EXT2__
+#endif // ifndef __NE_MINIMAL_OS__
diff --git a/dev/kernel/src/FS/HeFS+FileMgr.cc b/dev/kernel/src/FS/HeFS+FileMgr.cc
new file mode 100644
index 00000000..e6719e1b
--- /dev/null
+++ b/dev/kernel/src/FS/HeFS+FileMgr.cc
@@ -0,0 +1,14 @@
+/* -------------------------------------------
+
+ Copyright (C) 2024-2025, Amlal El Mahrouss, all rights reserved.
+
+------------------------------------------- */
+
+#ifndef __NE_MINIMAL_OS__
+#ifdef __FSKIT_INCLUDES_HEFS__
+
+#include <KernelKit/FileMgr.h>
+#include <KernelKit/MemoryMgr.h>
+
+#endif // ifdef __FSKIT_INCLUDES_HEFS__
+#endif // ifndef __NE_MINIMAL_OS__
diff --git a/dev/kernel/src/FS/NeFS+FileMgr.cc b/dev/kernel/src/FS/NeFS+FileMgr.cc
index 0107bd9e..348ae61b 100644
--- a/dev/kernel/src/FS/NeFS+FileMgr.cc
+++ b/dev/kernel/src/FS/NeFS+FileMgr.cc
@@ -4,12 +4,12 @@
------------------------------------------- */
-#include <KernelKit/FileMgr.h>
-#include <KernelKit/MemoryMgr.h>
-
#ifndef __NE_MINIMAL_OS__
#ifdef __FSKIT_INCLUDES_NEFS__
+#include <KernelKit/FileMgr.h>
+#include <KernelKit/MemoryMgr.h>
+
/// @brief NeFS File manager.
/// BUGS: 0
diff --git a/dev/kernel/src/Gfx/FBDeviceInterface.cc b/dev/kernel/src/Gfx/FBDeviceInterface.cc
new file mode 100644
index 00000000..c2eb2ca7
--- /dev/null
+++ b/dev/kernel/src/Gfx/FBDeviceInterface.cc
@@ -0,0 +1,69 @@
+/* -------------------------------------------
+
+ Copyright (C) 2024-2025, Amlal El Mahrouss, all rights reserved.
+
+------------------------------------------- */
+
+#include <GfxKit/FB.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;
+
+ if (pckt->fHeight == 0 || pckt->fWidth == 0)
+ return *this;
+
+ if (pckt->fX > kHandoverHeader->f_GOP.f_Width ||
+ pckt->fY > kHandoverHeader->f_GOP.f_Height)
+ 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;
+
+ if (pckt->fX > kHandoverHeader->f_GOP.f_Width ||
+ pckt->fY > kHandoverHeader->f_GOP.f_Height)
+ 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.