summaryrefslogtreecommitdiffhomepage
path: root/dev/kernel/HALKit/ARM64/Storage
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal.elmahrouss@icloud.com>2025-03-23 19:13:48 +0100
committerAmlal El Mahrouss <amlal.elmahrouss@icloud.com>2025-03-23 19:15:17 +0100
commita13e1c0911c0627184bc38f18c7fdda64447b3ad (patch)
tree073a62c09bf216e85a3f310376640fa1805147f9 /dev/kernel/HALKit/ARM64/Storage
parent149fa096eb306d03686b3b67e813cf1a78e08cd0 (diff)
meta(kernel): Reworked repository's filesystem structure.
Removing useless parts of the project too. Signed-off-by: Amlal El Mahrouss <amlal.elmahrouss@icloud.com>
Diffstat (limited to 'dev/kernel/HALKit/ARM64/Storage')
-rw-r--r--dev/kernel/HALKit/ARM64/Storage/MBCI+Flash+IO+Generic.cc119
-rw-r--r--dev/kernel/HALKit/ARM64/Storage/UFS+Generic.cc11
2 files changed, 130 insertions, 0 deletions
diff --git a/dev/kernel/HALKit/ARM64/Storage/MBCI+Flash+IO+Generic.cc b/dev/kernel/HALKit/ARM64/Storage/MBCI+Flash+IO+Generic.cc
new file mode 100644
index 00000000..94d20878
--- /dev/null
+++ b/dev/kernel/HALKit/ARM64/Storage/MBCI+Flash+IO+Generic.cc
@@ -0,0 +1,119 @@
+/* -------------------------------------------
+
+ Copyright (C) 2024-2025, Amlal EL Mahrouss, all rights reserved.
+
+------------------------------------------- */
+
+#ifdef NE_USE_MBCI_FLASH
+
+#include <NewKit/Defines.h>
+#include <ArchKit/ArchKit.h>
+#include <modules/MFlash/MFlash.h>
+#include <modules/MBCI/MBCI.h>
+
+/// @file MBCI+Flash.cc
+/// @brief MBCI Flash support.
+
+#define MBCI_MAX_SLOTS (8U)
+
+namespace NeOS
+{
+ /// /Mount/Flash/n
+ constexpr auto kFlashBridgeMagic = 0x70768372;
+ constexpr auto kFlashBridgeRevision = 1;
+
+ STATIC BOOL kFlashEnabled = NO;
+ STATIC SizeT kFlashSize[MBCI_MAX_SLOTS] = {};
+ STATIC SizeT kFlashSectorSz[MBCI_MAX_SLOTS] = {};
+ STATIC IMBCIHost* kFlashMetaPackets[MBCI_MAX_SLOTS] = {};
+ STATIC IMBCIHost* kFlashDataPackets[MBCI_MAX_SLOTS] = {};
+
+ STATIC Void drv_std_io(Int32 slot, UInt64 lba, Char* buf, SizeT sector_sz, SizeT buf_sz);
+
+ /// @brief Enable flash memory builtin.
+ STATIC Void drv_enable_flash(Int32 slot);
+
+ /// @brief Disable flash memory builtin.
+ STATIC Void drv_disable_flash(Int32 slot);
+
+ /// @brief get slot sector count.
+ /// @return slot sector count.
+ SizeT drv_get_sector_count(Int32 slot)
+ {
+ if (slot > MBCI_MAX_SLOTS)
+ return 0;
+
+ return kFlashSectorSz[slot];
+ }
+
+ /// @brief get slot full size (in bytes).
+ /// @return drive slot size
+ SizeT drv_get_size(Int32 slot)
+ {
+ if (slot > MBCI_MAX_SLOTS)
+ return 0;
+
+ return kFlashSize[slot];
+ }
+
+ /// @brief Enable flash memory at slot.
+ BOOL drv_enable_at(Int32 slot)
+ {
+ if (slot > MBCI_MAX_SLOTS)
+ return NO;
+
+ kFlashMetaPackets[slot]->InterruptEnable = YES;
+
+ kout << "Enabled hardware slot at: " << number(slot) << kendl;
+
+ return YES;
+ }
+
+ /// @brief Disable flash memory at slot.
+ BOOL drv_disable_at(Int32 slot)
+ {
+ if (slot > MBCI_MAX_SLOTS)
+ return NO;
+
+ kFlashMetaPackets[slot]->InterruptEnable = NO;
+
+ kout << "Disabled hardware slot at: " << number(slot) << kendl;
+
+ return YES;
+ }
+
+ STATIC Void drv_std_io(Int32 slot, UInt64 lba, Char* buf, SizeT sector_sz, SizeT buf_sz)
+ {
+ UInt64* packet_frame = (UInt64*)kFlashDataPackets[slot]->BaseAddressRegister;
+
+ if (packet_frame[0] != (UInt64)kFlashBridgeMagic)
+ return;
+
+ if (packet_frame[8] != (UInt64)kFlashBridgeRevision)
+ return;
+
+ packet_frame[16 + 0] = lba;
+ packet_frame[16 + 4] = sector_sz;
+ packet_frame[16 + 8] = lba;
+ packet_frame[16 + 12] = buf_sz;
+ packet_frame[16 + 14] = (UIntPtr)HAL::hal_get_phys_address(buf);
+
+ while (packet_frame[0] == lba)
+ ;
+ }
+
+ Void drv_std_read(Int32 slot, UInt64 lba, Char* buf, SizeT sector_sz, SizeT buf_sz)
+ {
+ rt_set_memory(buf, 0, buf_sz);
+
+ drv_std_io(slot, lba, buf, sector_sz, buf_sz);
+ }
+
+ Void drv_std_write(Int32 slot, UInt64 lba, Char* buf, SizeT sector_sz, SizeT buf_sz)
+ {
+ drv_std_io(slot, lba, buf, sector_sz, buf_sz);
+ }
+
+} // namespace NeOS
+
+#endif // if NE_USE_MBCI_FLASH
diff --git a/dev/kernel/HALKit/ARM64/Storage/UFS+Generic.cc b/dev/kernel/HALKit/ARM64/Storage/UFS+Generic.cc
new file mode 100644
index 00000000..20d06671
--- /dev/null
+++ b/dev/kernel/HALKit/ARM64/Storage/UFS+Generic.cc
@@ -0,0 +1,11 @@
+/* -------------------------------------------
+
+ Copyright (C) 2024-2025, Amlal EL Mahrouss, all rights reserved.
+
+------------------------------------------- */
+
+/// @file UFS.cc
+/// @brief UFS Flash Memory support.
+
+#define UFS_PCI_VENDOR_ID (0x01001) /* AKER */
+#define UFS_PCI_DEVICE_ID (0xAEAEA) /* AKER */ \ No newline at end of file