summaryrefslogtreecommitdiffhomepage
path: root/dev
diff options
context:
space:
mode:
Diffstat (limited to 'dev')
-rw-r--r--dev/boot/src/root/ifs.json10
-rw-r--r--dev/kernel/ArchKit/ArchKit.h2
-rw-r--r--dev/kernel/HALKit/AMD64/HalApplicationProcessor.cc4
-rw-r--r--dev/kernel/KernelKit/CodeMgr.h4
-rw-r--r--dev/kernel/KernelKit/DriveMgr.h16
-rw-r--r--dev/kernel/KernelKit/IFS.h25
-rw-r--r--dev/kernel/amd64-desktop.make2
-rw-r--r--dev/kernel/src/FS/NeFS+FileSystemParser.cc1
-rw-r--r--dev/kernel/src/IFS.cc (renamed from dev/kernel/src/DriveMgr+IO.cc)16
-rw-r--r--dev/kernel/src/UserProcessScheduler.cc1
-rw-r--r--dev/user/SystemCalls.h20
11 files changed, 67 insertions, 34 deletions
diff --git a/dev/boot/src/root/ifs.json b/dev/boot/src/root/ifs.json
new file mode 100644
index 00000000..354ab503
--- /dev/null
+++ b/dev/boot/src/root/ifs.json
@@ -0,0 +1,10 @@
+{
+ "type": "IFS",
+ "sys": [
+ "/~drivers/fat32.sys",
+ "/~drivers/ntfs.sys",
+ "/~drivers/ext4.sys",
+ "/~drivers/iso9660.sys",
+ "/~drivers/nfs4.sys"
+ ]
+} \ No newline at end of file
diff --git a/dev/kernel/ArchKit/ArchKit.h b/dev/kernel/ArchKit/ArchKit.h
index 08e8ab88..b6637ec1 100644
--- a/dev/kernel/ArchKit/ArchKit.h
+++ b/dev/kernel/ArchKit/ArchKit.h
@@ -77,8 +77,6 @@ struct HalSyscallEntry final {
operator bool() { return fHooked; }
};
-EXTERN_C Kernel::HAL::StackFramePtr mp_get_current_task(Kernel::Int64 pid);
-
inline Kernel::Array<HalSyscallEntry, kMaxDispatchCallCount> kSysCalls;
inline Kernel::Array<HalSyscallEntry, kMaxDispatchCallCount> kKernCalls;
diff --git a/dev/kernel/HALKit/AMD64/HalApplicationProcessor.cc b/dev/kernel/HALKit/AMD64/HalApplicationProcessor.cc
index 1fbf9fea..cb1ec59b 100644
--- a/dev/kernel/HALKit/AMD64/HalApplicationProcessor.cc
+++ b/dev/kernel/HALKit/AMD64/HalApplicationProcessor.cc
@@ -101,7 +101,7 @@ Void hal_send_ipi_msg(UInt32 target, UInt32 apic_id, UInt8 vector) {
/// @param thrdid The thread ID.
/***********************************************************************************/
-EXTERN_C HAL::StackFramePtr mp_get_current_task(Int64 thrdid) {
+EXTERN_C HAL::StackFramePtr mp_get_current_task(ThreadID thrdid) {
if (thrdid > kSMPCount) return nullptr;
return kHWThread[thrdid].mFramePtr;
}
@@ -112,7 +112,7 @@ EXTERN_C HAL::StackFramePtr mp_get_current_task(Int64 thrdid) {
/// @param thrdid The thread ID.
/***********************************************************************************/
-EXTERN_C BOOL mp_register_task(HAL::StackFramePtr stack_frame, ProcessID thrdid) {
+EXTERN_C BOOL mp_register_task(HAL::StackFramePtr stack_frame, ThreadID thrdid) {
if (thrdid > kSMPCount) return NO;
if (!stack_frame) return NO;
diff --git a/dev/kernel/KernelKit/CodeMgr.h b/dev/kernel/KernelKit/CodeMgr.h
index f4d46b4b..072ba4d5 100644
--- a/dev/kernel/KernelKit/CodeMgr.h
+++ b/dev/kernel/KernelKit/CodeMgr.h
@@ -23,10 +23,10 @@ namespace Kernel {
typedef void (*rtl_main_kind)(void);
/// @brief C++ Constructor entrypoint.
-typedef void (*rtl_ctor_kind)(void);
+typedef void (*rtl_cxx_ctor_kind)(void);
/// @brief C++ Destructor entrypoint.
-typedef void (*rtl_dtor_kind)(void);
+typedef void (*rtl_cxx_dtor_kind)(void);
/// @brief Executes a new process from a function. Kernel code only.
/// @note This sets up a new stack, anything on the main function that calls the Kernel will not be
diff --git a/dev/kernel/KernelKit/DriveMgr.h b/dev/kernel/KernelKit/DriveMgr.h
index 684e2e5c..4a530deb 100644
--- a/dev/kernel/KernelKit/DriveMgr.h
+++ b/dev/kernel/KernelKit/DriveMgr.h
@@ -23,6 +23,8 @@
#define drv_sector_cnt(SIZE, SECTOR_SZ) (((SIZE) + (SECTOR_SZ)) / (SECTOR_SZ))
+#define kDriveHiddenPrefix '~'
+
namespace Kernel {
enum {
kInvalidDrive = -1,
@@ -159,20 +161,6 @@ namespace Detect {
Void io_drv_input(DriveTrait::DrivePacket pckt);
Void io_drv_output(DriveTrait::DrivePacket pckt);
-
-/// @brief Read from IFS disk.
-/// @param Mnt mounted interface.
-/// @param DrvTrait drive info
-/// @param DrvIndex drive index.
-/// @return
-Int32 fs_ifs_read(MountpointInterface* Mnt, DriveTrait& DrvTrait, Int32 DrvIndex);
-
-/// @brief Write to IFS disk.
-/// @param Mnt mounted interface.
-/// @param DrvTrait drive info
-/// @param DrvIndex drive index.
-/// @return
-Int32 fs_ifs_write(MountpointInterface* Mnt, DriveTrait& DrvTrait, Int32 DrvIndex);
} // namespace Kernel
#endif /* ifndef INC_DRIVE_MANAGER_H */
diff --git a/dev/kernel/KernelKit/IFS.h b/dev/kernel/KernelKit/IFS.h
new file mode 100644
index 00000000..5555764f
--- /dev/null
+++ b/dev/kernel/KernelKit/IFS.h
@@ -0,0 +1,25 @@
+/* -------------------------------------------
+
+ Copyright (C) 2024-2025, Amlal El Mahrouss, all rights reserved.
+
+------------------------------------------- */
+
+#pragma once
+
+#include <KernelKit/DriveMgr.h>
+
+namespace Kernel {
+/// @brief Read from IFS disk.
+/// @param Mnt mounted interface.
+/// @param DrvTrait drive info
+/// @param DrvIndex drive index.
+/// @return
+Int32 fs_ifs_read(MountpointInterface* Mnt, DriveTrait& DrvTrait, Int32 DrvIndex);
+
+/// @brief Write to IFS disk.
+/// @param Mnt mounted interface.
+/// @param DrvTrait drive info
+/// @param DrvIndex drive index.
+/// @return
+Int32 fs_ifs_write(MountpointInterface* Mnt, DriveTrait& DrvTrait, Int32 DrvIndex);
+} // namespace Kernel \ No newline at end of file
diff --git a/dev/kernel/amd64-desktop.make b/dev/kernel/amd64-desktop.make
index 49593101..21488782 100644
--- a/dev/kernel/amd64-desktop.make
+++ b/dev/kernel/amd64-desktop.make
@@ -5,7 +5,7 @@
CXX = x86_64-w64-mingw32-g++
LD = x86_64-w64-mingw32-ld
-CCFLAGS = -fshort-wchar -c -D__NE_AMD64__ -D__NE_VEPM__ -Wall -Wpedantic -Wextra -mno-red-zone -fno-rtti -fno-exceptions -std=c++20 -D__FSKIT_INCLUDES_HEFS__ -D__NE_SUPPORT_NX__ -O0 -I../vendor -D__FSKIT_INCLUDES_NEFS__ -D__NEOSKRNL__ -D__HAVE_NE_APIS__ -D__FREESTANDING__ -D__NE_VIRTUAL_MEMORY_SUPPORT__ -D__NE_AUTO_FORMAT__ -D__NE__ -I./ -I../ -I../boot
+CCFLAGS = -fshort-wchar -c -D__NE_AMD64__ -D__NE_VEPM__ -Wall -Wpedantic -Wextra -mno-red-zone -fno-rtti -fno-exceptions -std=c++20 -D__FSKIT_INCLUDES_HEFS__ -D__NE_SUPPORT_NX__ -O0 -I../vendor -D__NEOSKRNL__ -D__HAVE_NE_APIS__ -D__FREESTANDING__ -D__NE_VIRTUAL_MEMORY_SUPPORT__ -D__NE_AUTO_FORMAT__ -D__NE__ -I./ -I../ -I../boot
ASM = nasm
diff --git a/dev/kernel/src/FS/NeFS+FileSystemParser.cc b/dev/kernel/src/FS/NeFS+FileSystemParser.cc
index 97b2ff36..dd0a1d9a 100644
--- a/dev/kernel/src/FS/NeFS+FileSystemParser.cc
+++ b/dev/kernel/src/FS/NeFS+FileSystemParser.cc
@@ -10,6 +10,7 @@
#include <FirmwareKit/EPM.h>
#include <KernelKit/DriveMgr.h>
+#include <KernelKit/IFS.h>
#include <KernelKit/KPC.h>
#include <KernelKit/ProcessScheduler.h>
#include <KernelKit/UserMgr.h>
diff --git a/dev/kernel/src/DriveMgr+IO.cc b/dev/kernel/src/IFS.cc
index 9137c91e..ba2ec8c0 100644
--- a/dev/kernel/src/DriveMgr+IO.cc
+++ b/dev/kernel/src/IFS.cc
@@ -9,9 +9,9 @@
/*************************************************************
*
- * File: DriveMgr+IO.cc
+ * File: IFS.cc
* Purpose: Filesystem to mountpoint interface.
- * Date: 3/26/24
+ * Date: 05/26/2025
*
* Copyright (C) 2024-2025, Amlal El Mahrouss, all rights reserved.
*
@@ -23,13 +23,13 @@
#define fsi_ifs_read(DRV, TRAITS, MP) (MP->DRV()).fInput(TRAITS)
namespace Kernel {
-/// @brief Read from newfs disk.
+/// @brief Read from fs disk.
/// @param Mnt mounted interface.
/// @param DrvTrait drive info
/// @param DrvIndex drive index.
/// @return
Int32 fs_ifs_read(MountpointInterface* Mnt, DriveTrait& DrvTrait, Int32 DrvIndex) {
- if (!Mnt) return 1;
+ if (!Mnt) return kErrorDisk;
DrvTrait.fPacket.fPacketGood = false;
@@ -52,16 +52,16 @@ Int32 fs_ifs_read(MountpointInterface* Mnt, DriveTrait& DrvTrait, Int32 DrvIndex
}
}
- return DrvTrait.fPacket.fPacketGood;
+ return DrvTrait.fPacket.fPacketGood ? kErrorSuccess : kErrorDisk;
}
-/// @brief Write to newfs disk.
+/// @brief Write to fs disk.
/// @param Mnt mounted interface.
/// @param DrvTrait drive info
/// @param DrvIndex drive index.
/// @return
Int32 fs_ifs_write(MountpointInterface* Mnt, DriveTrait& DrvTrait, Int32 DrvIndex) {
- if (!Mnt) return 1;
+ if (!Mnt) return kErrorDisk;
DrvTrait.fPacket.fPacketGood = false;
@@ -84,6 +84,6 @@ Int32 fs_ifs_write(MountpointInterface* Mnt, DriveTrait& DrvTrait, Int32 DrvInde
}
}
- return DrvTrait.fPacket.fPacketGood;
+ return DrvTrait.fPacket.fPacketGood ? kErrorSuccess : kErrorDisk;
}
} // namespace Kernel \ No newline at end of file
diff --git a/dev/kernel/src/UserProcessScheduler.cc b/dev/kernel/src/UserProcessScheduler.cc
index f900f984..4bbd085a 100644
--- a/dev/kernel/src/UserProcessScheduler.cc
+++ b/dev/kernel/src/UserProcessScheduler.cc
@@ -126,6 +126,7 @@ ErrorOr<VoidPtr> USER_PROCESS::New(SizeT sz, SizeT pad_amount) {
#ifdef __NE_VIRTUAL_MEMORY_SUPPORT__
auto vm_register = kKernelVM;
+
hal_write_cr3(this->VMRegister);
auto ptr = mm_alloc_ptr(sz, Yes, Yes, pad_amount);
diff --git a/dev/user/SystemCalls.h b/dev/user/SystemCalls.h
index e8b4e59c..d77c0b8f 100644
--- a/dev/user/SystemCalls.h
+++ b/dev/user/SystemCalls.h
@@ -20,7 +20,7 @@ typedef VoidPtr Ref;
typedef Ref IORef;
typedef Ref FSRef;
-typedef Ref DLLRef;
+typedef Ref DylibRef;
typedef Ref ThreadRef;
typedef Ref SocketRef;
typedef Ref NetworkRef;
@@ -36,18 +36,18 @@ typedef Ref SemaphoreRef;
/// @param symbol the symbol to look for
/// @param dll_handle the Dylib handle.
/// @return the proc pointer.
-IMPORT_C Ref LdrGetDLLSymbolFromHandle(_Input const Char* symbol, _Input Ref dll_handle);
+IMPORT_C Ref LdrGetDylibSymbolFromHandle(_Input const Char* symbol, _Input Ref dll_handle);
/// @brief Open Dylib handle.
/// @param path dll path.
/// @param drv driver letter.
/// @return a dylib ref.
-IMPORT_C Ref LdrOpenDLLHandle(_Input const Char* path, _Input const Char* drive_letter);
+IMPORT_C Ref LdrOpenDylibHandle(_Input const Char* path, _Input const Char* drive_letter);
/// @brief Close Dylib handle
/// @param dll_handle the dylib ref.
/// @return whether it closed or not.
-IMPORT_C UInt32 LdrCloseDLLHandle(_Input Ref* dll_handle);
+IMPORT_C UInt32 LdrCloseDylibHandle(_Input Ref* dll_handle);
// ------------------------------------------------------------------------------------------ //
// File API.
@@ -360,7 +360,17 @@ IMPORT_C BOOL FsCreateFile(const Char* path);
IMPORT_C BOOL FsCreateAlias(const Char* path, const Char* from);
// ------------------------------------------------------------------------------------------ //
-// @brief String API.
+// @brief Installable Filesystem API.
+// ------------------------------------------------------------------------------------------ //
+
+IMPORT_C BOOL IfsMount(const Char* path, const Char* drive_letter);
+
+IMPORT_C BOOL IfsUnmount(const Char* drive_letter);
+
+IMPORT_C BOOL IfsIsMounted(const Char* drive_letter);
+
+// ------------------------------------------------------------------------------------------ //
+// @brief String Manip API.
// ------------------------------------------------------------------------------------------ //
IMPORT_C Char* StrFmt(const Char* fmt, ...);