summaryrefslogtreecommitdiffhomepage
path: root/Private
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlalelmahrouss@icloud.com>2024-02-24 17:29:16 +0100
committerAmlal El Mahrouss <amlalelmahrouss@icloud.com>2024-02-24 17:29:16 +0100
commita481180f3bcb979fecdced3851506bf572327fcf (patch)
treece2f025d2057c94dd8766680be630766c77babd4 /Private
parent3796780438de17a5da38f1d5a6845942c27c0e5c (diff)
Kernel: Important commit, see below.
- Rename EFIKit to FirmwareKit. - Reworked DriveManager, a mountpoint is a class which contains 4 disks at maximum, they act as virtual ones, their format doesn't matter. - Add KeHCFSRead, and KeHCFSWrite. Signed-off-by: Amlal El Mahrouss <amlalelmahrouss@icloud.com>
Diffstat (limited to 'Private')
-rw-r--r--Private/Drivers/AHCI/API.hxx1
-rw-r--r--Private/FirmwareKit/.gitkeep (renamed from Private/EFIKit/.gitkeep)0
-rw-r--r--Private/FirmwareKit/EFI.hxx (renamed from Private/EFIKit/UEFI.hxx)3
-rw-r--r--Private/FirmwareKit/EFI/API.hxx (renamed from Private/EFIKit/Api.hxx)2
-rw-r--r--Private/FirmwareKit/EFI/EFI.hxx (renamed from Private/EFIKit/EFI.hxx)0
-rw-r--r--Private/FirmwareKit/EPM.hxx (renamed from Private/EFIKit/EPM.hxx)12
-rw-r--r--Private/FirmwareKit/Handover.hxx (renamed from Private/EFIKit/Handover.hxx)0
-rw-r--r--Private/KernelKit/DriveManager.hpp53
-rw-r--r--Private/KernelKit/HError.hpp1
-rw-r--r--Private/NewBoot/BootKit/BootKit.hxx2
-rw-r--r--Private/NewBoot/BootKit/Protocol.hxx4
-rw-r--r--Private/NewBoot/NetBoot/EfiModule.cxx3
-rw-r--r--Private/NewBoot/Source/BootMain.cxx1
-rw-r--r--Private/NewBoot/Source/FileReader.cxx3
-rw-r--r--Private/NewBoot/Source/HEL/AMD64/AMD64-ATA.cxx1
-rw-r--r--Private/NewBoot/Source/HEL/AMD64/AMD64-Platform.cxx1
-rw-r--r--Private/NewBoot/Source/String.cxx1
-rw-r--r--Private/NewBoot/Source/TextWriter.cxx1
-rw-r--r--Private/NewBoot/Source/Utils.cxx3
-rw-r--r--Private/Source/DriveManager.cxx45
-rw-r--r--Private/Source/KernelMain.cxx2
-rw-r--r--Private/Source/NewFS+IO.cxx59
22 files changed, 113 insertions, 85 deletions
diff --git a/Private/Drivers/AHCI/API.hxx b/Private/Drivers/AHCI/API.hxx
new file mode 100644
index 00000000..8b137891
--- /dev/null
+++ b/Private/Drivers/AHCI/API.hxx
@@ -0,0 +1 @@
+
diff --git a/Private/EFIKit/.gitkeep b/Private/FirmwareKit/.gitkeep
index e69de29b..e69de29b 100644
--- a/Private/EFIKit/.gitkeep
+++ b/Private/FirmwareKit/.gitkeep
diff --git a/Private/EFIKit/UEFI.hxx b/Private/FirmwareKit/EFI.hxx
index de211a4a..3ef28288 100644
--- a/Private/EFIKit/UEFI.hxx
+++ b/Private/FirmwareKit/EFI.hxx
@@ -7,4 +7,5 @@
* ========================================================
*/
-#include <EFIKit/EFI.hxx>
+#include <FirmwareKit/EFI/API.hxx>
+#include <FirmwareKit/EFI/EFI.hxx>
diff --git a/Private/EFIKit/Api.hxx b/Private/FirmwareKit/EFI/API.hxx
index d2cb73f8..8856c676 100644
--- a/Private/EFIKit/Api.hxx
+++ b/Private/FirmwareKit/EFI/API.hxx
@@ -10,7 +10,7 @@
#ifndef __EFI_API__
#define __EFI_API__
-#include <EFIKit/EFI.hxx>
+#include <FirmwareKit/EFI.hxx>
#include <KernelKit/MSDOS.hpp>
#include <KernelKit/PE.hpp>
diff --git a/Private/EFIKit/EFI.hxx b/Private/FirmwareKit/EFI/EFI.hxx
index aeadfc01..aeadfc01 100644
--- a/Private/EFIKit/EFI.hxx
+++ b/Private/FirmwareKit/EFI/EFI.hxx
diff --git a/Private/EFIKit/EPM.hxx b/Private/FirmwareKit/EPM.hxx
index db6b8b2f..77f9901a 100644
--- a/Private/EFIKit/EPM.hxx
+++ b/Private/FirmwareKit/EPM.hxx
@@ -14,9 +14,9 @@
#ifndef __PARTITION_MAP__
#define __PARTITION_MAP__
-#define kUUIDLen 37
-#define kNameLen 32
-#define kMagicLen 4
+#define kEPMUUIDLength 37
+#define kEPMNameLength 32
+#define kEPMMagicLength 4
/* the first 512 > x > 1024 bytes of a disk contains this headers. */
@@ -25,9 +25,9 @@
* boot code info
*/
struct __attribute__((packed)) BootBlock {
- char magic[kMagicLen];
- char name[kNameLen];
- char uuid[kUUIDLen];
+ char magic[kEPMMagicLength];
+ char name[kEPMNameLength];
+ char uuid[kEPMUUIDLength];
int version;
long long int num_blocks;
long long int sector_sz;
diff --git a/Private/EFIKit/Handover.hxx b/Private/FirmwareKit/Handover.hxx
index c85eaddd..c85eaddd 100644
--- a/Private/EFIKit/Handover.hxx
+++ b/Private/FirmwareKit/Handover.hxx
diff --git a/Private/KernelKit/DriveManager.hpp b/Private/KernelKit/DriveManager.hpp
index 8e6aaefd..d48b8aae 100644
--- a/Private/KernelKit/DriveManager.hpp
+++ b/Private/KernelKit/DriveManager.hpp
@@ -11,7 +11,9 @@
#define __DRIVE_MANAGER__
#include <CompilerKit/CompilerKit.hpp>
+#include <KernelKit/DebugOutput.hpp>
#include <KernelKit/DeviceManager.hpp>
+#include <KernelKit/HError.hpp>
#include <NewKit/Defines.hpp>
#include <NewKit/String.hpp>
@@ -41,17 +43,15 @@ struct DriveTraits final {
DriveID fId; // Drive id.
Int32 fFlags; // fReadOnly, fXPMDrive, fXPTDrive
- //! disk mount, unmount operations
- void (*fMount)(void);
- void (*fUnmount)(void);
-
- bool (*fReady)(void); //! is drive ready?
+ Handle fDriveHandle;
//! for StorageKit.
struct DrivePacket final {
voidPtr fPacketContent; // packet body.
Char fPacketMime[32]; //! identify what we're sending.
SizeT fPacketSize; // packet size
+ UInt32 fPacketCRC32; // sanity crc, in case if good is set to false
+ Boolean fPacketGood;
} fPacket;
};
@@ -61,23 +61,44 @@ struct DriveTraits final {
#define kPacketZip "file/x-zip"
//! drive as a device.
-typedef DeviceInterface<DriveTraits> Drive;
-typedef Drive *DrivePtr;
+typedef DeviceInterface<DriveTraits> DriveDevice;
+typedef DriveDevice* DriveDevicePtr;
-class DriveSelector final {
+class Mountpoint final {
public:
- explicit DriveSelector();
- ~DriveSelector();
+ explicit Mountpoint() = default;
+ ~Mountpoint() = default;
- public:
- HCORE_COPY_DEFAULT(DriveSelector);
+ HCORE_COPY_DEFAULT(Mountpoint);
- DriveTraits &GetMounted();
- bool Mount(DriveTraits *drive);
- DriveTraits *Unmount();
+ public:
+ DriveDevicePtr A() { return mA; }
+ DriveDevicePtr B() { return mB; }
+ DriveDevicePtr C() { return mC; }
+ DriveDevicePtr D() { return mD; }
+
+ DriveDevicePtr* GetAddressOf(int index) {
+ switch (index) {
+ case 0:
+ return &mA;
+ case 1:
+ return &mB;
+ case 2:
+ return &mC;
+ case 3:
+ return &mD;
+ default: {
+ GetLastError() = kErrorNoSuchDisk;
+ kcout << "Krnl\\Mountpoint: Check HError.\n";
+ break;
+ }
+ }
+
+ return nullptr;
+ }
private:
- DriveTraits *fDrive;
+ DriveDevicePtr mA, mB, mC, mD;
};
} // namespace HCore
diff --git a/Private/KernelKit/HError.hpp b/Private/KernelKit/HError.hpp
index 247608f9..f050027f 100644
--- a/Private/KernelKit/HError.hpp
+++ b/Private/KernelKit/HError.hpp
@@ -27,6 +27,7 @@ inline constexpr HError kErrorThreadLocalStorage = 41;
inline constexpr HError kErrorMath = 42;
inline constexpr HError kErrorNoNetwork = 43;
inline constexpr HError kErrorHeapOutOfMemory = 44;
+inline constexpr HError kErrorNoSuchDisk = 45;
Boolean ke_bug_check(void) noexcept;
} // namespace HCore
diff --git a/Private/NewBoot/BootKit/BootKit.hxx b/Private/NewBoot/BootKit/BootKit.hxx
index 5128d02f..81624ce5 100644
--- a/Private/NewBoot/BootKit/BootKit.hxx
+++ b/Private/NewBoot/BootKit/BootKit.hxx
@@ -19,7 +19,7 @@ class BFileReader;
class BFileRunner;
#include <BootKit/Arch/ATA.hxx>
-#include <EFIKit/EFI.hxx>
+#include <FirmwareKit/EFI.hxx>
#include <NewKit/Defines.hpp>
using namespace HCore;
diff --git a/Private/NewBoot/BootKit/Protocol.hxx b/Private/NewBoot/BootKit/Protocol.hxx
index 055858a8..d3dc1ab1 100644
--- a/Private/NewBoot/BootKit/Protocol.hxx
+++ b/Private/NewBoot/BootKit/Protocol.hxx
@@ -9,5 +9,5 @@
#pragma once
-#include <EFIKit/EFI.hxx>
-#include <EFIKit/Handover.hxx>
+#include <FirmwareKit/EFI.hxx>
+#include <FirmwareKit/Handover.hxx>
diff --git a/Private/NewBoot/NetBoot/EfiModule.cxx b/Private/NewBoot/NetBoot/EfiModule.cxx
index a0ce13a5..36a7288c 100644
--- a/Private/NewBoot/NetBoot/EfiModule.cxx
+++ b/Private/NewBoot/NetBoot/EfiModule.cxx
@@ -7,8 +7,7 @@
* ========================================================
*/
-#include <EFIKit/Api.hxx>
-#include <EFIKit/EFI.hxx>
+#include <FirmwareKit/EFI.hxx>
extern "C" Int32 EfiMain(EfiHandlePtr handle, EfiSystemTable* SystemTable) {
return kEfiOk;
diff --git a/Private/NewBoot/Source/BootMain.cxx b/Private/NewBoot/Source/BootMain.cxx
index c2ee87e3..35270b4b 100644
--- a/Private/NewBoot/Source/BootMain.cxx
+++ b/Private/NewBoot/Source/BootMain.cxx
@@ -10,7 +10,6 @@
#define __BOOTLOADER__ 1
#include <BootKit/BootKit.hxx>
-#include <EFIKit/Api.hxx>
#include <HALKit/AMD64/ACPI/ACPI.hpp>
#include <KernelKit/MSDOS.hpp>
#include <KernelKit/PE.hpp>
diff --git a/Private/NewBoot/Source/FileReader.cxx b/Private/NewBoot/Source/FileReader.cxx
index 6696a1b4..193184c4 100644
--- a/Private/NewBoot/Source/FileReader.cxx
+++ b/Private/NewBoot/Source/FileReader.cxx
@@ -13,8 +13,7 @@
------------------------------------------- */
#include <BootKit/BootKit.hxx>
-#include <EFIKit/Api.hxx>
-#include <EFIKit/Handover.hxx>
+#include <FirmwareKit/Handover.hxx>
/// BUGS: 0
diff --git a/Private/NewBoot/Source/HEL/AMD64/AMD64-ATA.cxx b/Private/NewBoot/Source/HEL/AMD64/AMD64-ATA.cxx
index 04755dcf..0adf7707 100644
--- a/Private/NewBoot/Source/HEL/AMD64/AMD64-ATA.cxx
+++ b/Private/NewBoot/Source/HEL/AMD64/AMD64-ATA.cxx
@@ -20,7 +20,6 @@
#include <BootKit/Arch/ATA.hxx>
#include <BootKit/BootKit.hxx>
-#include <EFIKit/Api.hxx>
/// bugs: 0
diff --git a/Private/NewBoot/Source/HEL/AMD64/AMD64-Platform.cxx b/Private/NewBoot/Source/HEL/AMD64/AMD64-Platform.cxx
index e6c962b1..ff07b4c7 100644
--- a/Private/NewBoot/Source/HEL/AMD64/AMD64-Platform.cxx
+++ b/Private/NewBoot/Source/HEL/AMD64/AMD64-Platform.cxx
@@ -16,7 +16,6 @@
#include <BootKit/BootKit.hxx>
#include <BootKit/Platform.hxx>
-#include <EFIKit/Api.hxx>
#ifndef __BUNDLE_KERNEL__
diff --git a/Private/NewBoot/Source/String.cxx b/Private/NewBoot/Source/String.cxx
index c59e2bba..9fbe1a11 100644
--- a/Private/NewBoot/Source/String.cxx
+++ b/Private/NewBoot/Source/String.cxx
@@ -12,7 +12,6 @@
------------------------------------------- */
#include <BootKit/BootKit.hxx>
-#include <EFIKit/Api.hxx>
/// bugs 0
diff --git a/Private/NewBoot/Source/TextWriter.cxx b/Private/NewBoot/Source/TextWriter.cxx
index fe058aa4..b35866a5 100644
--- a/Private/NewBoot/Source/TextWriter.cxx
+++ b/Private/NewBoot/Source/TextWriter.cxx
@@ -12,7 +12,6 @@
------------------------------------------- */
#include <BootKit/BootKit.hxx>
-#include <EFIKit/Api.hxx>
/// BUGS: 0
diff --git a/Private/NewBoot/Source/Utils.cxx b/Private/NewBoot/Source/Utils.cxx
index 4165af2e..4f7293bc 100644
--- a/Private/NewBoot/Source/Utils.cxx
+++ b/Private/NewBoot/Source/Utils.cxx
@@ -8,8 +8,7 @@
*/
#include <BootKit/BootKit.hxx>
-#include <EFIKit/Api.hxx>
-#include <EFIKit/EFI.hxx>
+#include <FirmwareKit/EFI.hxx>
/// BUGS: 0
diff --git a/Private/Source/DriveManager.cxx b/Private/Source/DriveManager.cxx
index 371758b1..27f6cc42 100644
--- a/Private/Source/DriveManager.cxx
+++ b/Private/Source/DriveManager.cxx
@@ -10,47 +10,4 @@
#include <KernelKit/DebugOutput.hpp>
#include <KernelKit/DriveManager.hpp>
-namespace HCore {
-DriveSelector::DriveSelector() : fDrive(nullptr) {}
-
-DriveSelector::~DriveSelector() {
- if (fDrive) {
- this->Unmount();
- }
-}
-
-DriveTraits &DriveSelector::GetMounted() {
- MUST_PASS(fDrive != nullptr);
- return *fDrive;
-}
-
-bool DriveSelector::Mount(DriveTraits *drive) {
- if (drive && drive->fReady()) {
- if (fDrive != nullptr) {
- this->Unmount();
- }
-
- fDrive = drive;
- fDrive->fMount();
-
- kcout << "Mount: " << fDrive->fName << "\n";
-
- return true;
- }
-
- return false;
-}
-
-DriveTraits *DriveSelector::Unmount() {
- if (!fDrive) return nullptr;
-
- DriveTraits *drivePointer = fDrive;
-
- fDrive->fUnmount();
- fDrive = nullptr;
-
- kcout << "Unmount: " << fDrive->fName << "\n";
-
- return drivePointer;
-}
-} // namespace HCore
+namespace HCore {} // namespace HCore
diff --git a/Private/Source/KernelMain.cxx b/Private/Source/KernelMain.cxx
index e641c7e9..1b2698c4 100644
--- a/Private/Source/KernelMain.cxx
+++ b/Private/Source/KernelMain.cxx
@@ -8,7 +8,7 @@
*/
#include <ArchKit/ArchKit.hpp>
-#include <EFIKit/Handover.hxx>
+#include <FirmwareKit/Handover.hxx>
#include <KernelKit/FileManager.hpp>
#include <KernelKit/Framebuffer.hpp>
#include <KernelKit/PEFCodeManager.hxx>
diff --git a/Private/Source/NewFS+IO.cxx b/Private/Source/NewFS+IO.cxx
index 681b198a..2e6559c5 100644
--- a/Private/Source/NewFS+IO.cxx
+++ b/Private/Source/NewFS+IO.cxx
@@ -18,8 +18,63 @@
#ifdef __FSKIT_NEWFS__
-/// @brief This implements NewFS with Device Abstraction in mind.
+#include <FirmwareKit/EPM.hxx>
-/// BUGS: 0
+/// Useful macros.
+
+#define NEWFS_WRITE(DRV, TRAITS, MP) (*MP->DRV()) << TRAITS
+#define NEWFS_READ(DRV, TRAITS, MP) (*MP->DRV()) >> TRAITS
+
+using namespace HCore;
+
+Int32 KeHCFSRead(Mountpoint* Mnt, DriveTraits& DrvTraits, Int32 DrvIndex) {
+ if (!Mnt) return -1;
+
+ switch (DrvIndex) {
+ case 0: {
+ NEWFS_READ(A, DrvTraits, Mnt);
+ break;
+ }
+ case 1: {
+ NEWFS_READ(B, DrvTraits, Mnt);
+ break;
+ }
+ case 2: {
+ NEWFS_READ(C, DrvTraits, Mnt);
+ break;
+ }
+ case 3: {
+ NEWFS_READ(D, DrvTraits, Mnt);
+ break;
+ }
+ }
+
+ return DrvTraits.fPacket.fPacketGood;
+}
+
+Int32 KeHCFSWrite(Mountpoint* Mnt, DriveTraits& DrvTraits, Int32 DrvIndex) {
+ if (!Mnt) return -1;
+
+ switch (DrvIndex) {
+ case 0: {
+ NEWFS_WRITE(A, DrvTraits, Mnt);
+ break;
+ }
+ case 1: {
+ NEWFS_WRITE(B, DrvTraits, Mnt);
+ break;
+ }
+ case 2: {
+ NEWFS_WRITE(C, DrvTraits, Mnt);
+ break;
+ }
+ case 3: {
+ NEWFS_WRITE(D, DrvTraits, Mnt);
+ break;
+ }
+ }
+
+ return DrvTraits.fPacket.fPacketGood;
+}
#endif // ifdef __FSKIT_NEWFS__