summaryrefslogtreecommitdiffhomepage
path: root/dev
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal@nekernel.org>2025-04-05 06:27:18 +0200
committerAmlal El Mahrouss <amlal@nekernel.org>2025-04-05 06:30:10 +0200
commit9b7a2a6461a463b08a120c660fcc64b46b65d417 (patch)
tree0f29fbbe829f4d276b0bc3088138c81157fc4c73 /dev
parent1142eb1ca0b0323e5f01e55a16e690346a99f018 (diff)
kernel: storage, modules, mbci: implement mbci_read_auth_key, mbci_test_mmio, test DMA on AHCI too.
- Alongside fixes for BootNet, SysChk, and refactor for KernelScheduler, and MemoryMgr. - IMPORTANT: Add MBCI specs. Signed-off-by: Amlal El Mahrouss <amlal@nekernel.org>
Diffstat (limited to 'dev')
-rw-r--r--dev/boot/amd64-desktop.make3
-rw-r--r--dev/boot/modules/BootNet/BootNet.cc4
-rw-r--r--dev/boot/modules/BootNet/BootNetStartup.S2
-rw-r--r--dev/boot/modules/BootNet/amd64.json2
-rw-r--r--dev/boot/modules/SysChk/SysChk.cc2
-rw-r--r--dev/boot/modules/SysChk/SysChkStartup.S2
-rw-r--r--dev/boot/modules/SysChk/amd64.json2
-rw-r--r--dev/kernel/HALKit/AMD64/Storage/AHCI+Generic.cc25
-rw-r--r--dev/kernel/src/FileMgr.cc2
-rw-r--r--dev/kernel/src/IDylibObject.cc4
-rw-r--r--dev/kernel/src/IPEFDylibObject.cc2
-rw-r--r--dev/kernel/src/KernelProcessScheduler.cc4
-rw-r--r--dev/kernel/src/MemoryMgr.cc3
-rw-r--r--dev/kernel/src/ThreadLocalStorage.cc2
-rw-r--r--dev/modules/CoreGfx/CoreAccess.h6
-rw-r--r--dev/modules/CoreGfx/CoreGfx.h9
-rw-r--r--dev/modules/CoreGfx/MathGfx.h2
-rw-r--r--dev/modules/MBCI/MBCI.h43
-rw-r--r--dev/modules/NVME/NVME.h4
19 files changed, 82 insertions, 41 deletions
diff --git a/dev/boot/amd64-desktop.make b/dev/boot/amd64-desktop.make
index 6e796752..9e4e9894 100644
--- a/dev/boot/amd64-desktop.make
+++ b/dev/boot/amd64-desktop.make
@@ -97,7 +97,7 @@ all: compile-amd64
.PHONY: disk
disk:
dd if=/dev/zero of=$(BOOT) bs=30M count=100
- mformat -i $(BOOT) -F -v "NeKernel"
+ mformat -i $(BOOT) -F -v "NEKERNEL-ESP"
ifneq ($(DEBUG_SUPPORT), )
@@ -151,6 +151,7 @@ help:
@echo "=== HELP ==="
@echo "epm-img: Format a disk using the Explicit Partition Map."
@echo "gpt-img: Format a disk using the Explicit Partition Map."
+ @echo "disk: Format a FAT32 ESP disk."
@echo "clean: remove bootloader and files."
@echo "bootloader-amd64: Build bootloader. (PC AMD64)"
@echo "run-efi-amd64-<ahci, ata>: Run bootloader. (PC AMD64)"
diff --git a/dev/boot/modules/BootNet/BootNet.cc b/dev/boot/modules/BootNet/BootNet.cc
index a877b9a1..47129d38 100644
--- a/dev/boot/modules/BootNet/BootNet.cc
+++ b/dev/boot/modules/BootNet/BootNet.cc
@@ -11,11 +11,11 @@
#include <BootKit/BootKit.h>
#include <BootKit/BootThread.h>
-EfiGUID kEfiIP4ProtoGUID;
+STATIC EfiGUID kEfiIP4ProtoGUID = {};
STATIC Void bootnet_read_udp_packet(BOOTNET_INTERNET_HEADER&);
-EXTERN_C Int32 ModuleMain(Kernel::HEL::BootInfoHeader* handover)
+EXTERN_C Int32 BootNetModuleMain(Kernel::HEL::BootInfoHeader* handover)
{
BOOTNET_INTERNET_HEADER inet{};
diff --git a/dev/boot/modules/BootNet/BootNetStartup.S b/dev/boot/modules/BootNet/BootNetStartup.S
index 976c5e88..d8113bd7 100644
--- a/dev/boot/modules/BootNet/BootNetStartup.S
+++ b/dev/boot/modules/BootNet/BootNetStartup.S
@@ -20,3 +20,5 @@
.quad kHandoverMagic
.word kTypeDriver
+.word 0
+.word kArchAmd64 \ No newline at end of file
diff --git a/dev/boot/modules/BootNet/amd64.json b/dev/boot/modules/BootNet/amd64.json
index 112cf9f1..86143e6a 100644
--- a/dev/boot/modules/BootNet/amd64.json
+++ b/dev/boot/modules/BootNet/amd64.json
@@ -10,7 +10,7 @@
"-fPIC",
"-fno-rtti",
"-fno-exceptions",
- "-Wl,--subsystem=17,--image-base,0x1000000,-e,ModuleMain"
+ "-Wl,--subsystem=17,--image-base,0x1000000,-e,BootNetModuleMain"
],
"cpp_macros": [
"__NEOSKRNL__",
diff --git a/dev/boot/modules/SysChk/SysChk.cc b/dev/boot/modules/SysChk/SysChk.cc
index 51b247a5..f9af8517 100644
--- a/dev/boot/modules/SysChk/SysChk.cc
+++ b/dev/boot/modules/SysChk/SysChk.cc
@@ -21,7 +21,7 @@
#include <BootKit/BootThread.h>
#include <modules/CoreGfx/CoreGfx.h>
-EXTERN_C Int32 ModuleMain(Kernel::HEL::BootInfoHeader* handover)
+EXTERN_C Int32 SysChkModuleMain(Kernel::HEL::BootInfoHeader* handover)
{
#ifdef __NE_AMD64__
Boot::BDiskFormatFactory<BootDeviceATA> partition_factory;
diff --git a/dev/boot/modules/SysChk/SysChkStartup.S b/dev/boot/modules/SysChk/SysChkStartup.S
index 976c5e88..d8113bd7 100644
--- a/dev/boot/modules/SysChk/SysChkStartup.S
+++ b/dev/boot/modules/SysChk/SysChkStartup.S
@@ -20,3 +20,5 @@
.quad kHandoverMagic
.word kTypeDriver
+.word 0
+.word kArchAmd64 \ No newline at end of file
diff --git a/dev/boot/modules/SysChk/amd64.json b/dev/boot/modules/SysChk/amd64.json
index d995bde2..3b5bab6f 100644
--- a/dev/boot/modules/SysChk/amd64.json
+++ b/dev/boot/modules/SysChk/amd64.json
@@ -10,7 +10,7 @@
"-fPIC",
"-fno-rtti",
"-fno-exceptions",
- "-Wl,--subsystem=17,--image-base,0x1000000,-e,ModuleMain"
+ "-Wl,--subsystem=17,--image-base,0x1000000,-e,SysChkModuleMain"
],
"cpp_macros": [
"__NEOSKRNL__",
diff --git a/dev/kernel/HALKit/AMD64/Storage/AHCI+Generic.cc b/dev/kernel/HALKit/AMD64/Storage/AHCI+Generic.cc
index f74db6c0..8d053d8b 100644
--- a/dev/kernel/HALKit/AMD64/Storage/AHCI+Generic.cc
+++ b/dev/kernel/HALKit/AMD64/Storage/AHCI+Generic.cc
@@ -252,8 +252,11 @@ SizeT drv_get_size_ahci()
}
/// @brief Enable Host and probe using the IDENTIFY command.
-STATIC Void ahci_enable_and_probe()
+STATIC BOOL ahci_enable_and_probe()
{
+ if (kSATAHba->Cap == 0x0)
+ return NO;
+
kSATAHba->Ports[kSATAIndex].Cmd &= ~kHBAPxCmdFre;
kSATAHba->Ports[kSATAIndex].Cmd &= ~kHBAPxCmdST;
@@ -324,6 +327,8 @@ STATIC Void ahci_enable_and_probe()
}
drv_compute_disk_ahci();
+
+ return YES;
}
/// @brief Initializes an AHCI disk.
@@ -372,22 +377,24 @@ STATIC Bool drv_std_init_ahci(UInt16& pi, BOOL& atapi)
kSATAIndex = ahci_index;
kSATAHba = mem_ahci;
- ahci_enable_and_probe();
+ if (ahci_enable_and_probe())
+ {
+ err_global_get() = kErrorSuccess;
- err_global_get() = kErrorSuccess;
-
- return YES;
+ return YES;
+ }
}
else if (atapi && kSATAPISignature == mem_ahci->Ports[ahci_index].Sig)
{
kSATAIndex = ahci_index;
kSATAHba = mem_ahci;
- ahci_enable_and_probe();
-
- err_global_get() = kErrorSuccess;
+ if (ahci_enable_and_probe())
+ {
+ err_global_get() = kErrorSuccess;
- return YES;
+ return YES;
+ }
}
ports_implemented >>= 1;
diff --git a/dev/kernel/src/FileMgr.cc b/dev/kernel/src/FileMgr.cc
index 67c15e64..1a1ee6b8 100644
--- a/dev/kernel/src/FileMgr.cc
+++ b/dev/kernel/src/FileMgr.cc
@@ -7,8 +7,10 @@
#include <KernelKit/FileMgr.h>
#include <NewKit/Utils.h>
+/***********************************************************************************/
/// @file FileMgr.cc
//! @brief File System Manager API.
+/***********************************************************************************/
namespace Kernel
{
diff --git a/dev/kernel/src/IDylibObject.cc b/dev/kernel/src/IDylibObject.cc
index 92907859..ef4d5ecf 100644
--- a/dev/kernel/src/IDylibObject.cc
+++ b/dev/kernel/src/IDylibObject.cc
@@ -1,7 +1,7 @@
/*
* ========================================================
*
- * neoskrnl
+ * NeKernel
* Copyright (C) 2024-2025, Amlal El Mahrouss, all rights reserved.
*
* ========================================================
@@ -10,6 +10,4 @@
#include <KernelKit/IDylibObject.h>
#include <KernelKit/DebugOutput.h>
-#include <KernelKit/ProcessScheduler.h>
-
using namespace Kernel;
diff --git a/dev/kernel/src/IPEFDylibObject.cc b/dev/kernel/src/IPEFDylibObject.cc
index 39c99263..a42d267a 100644
--- a/dev/kernel/src/IPEFDylibObject.cc
+++ b/dev/kernel/src/IPEFDylibObject.cc
@@ -1,7 +1,7 @@
/*
* ========================================================
*
- * neoskrnl
+* NeKernel
* Copyright (C) 2024-2025, Amlal El Mahrouss, all rights reserved.
*
* ========================================================
diff --git a/dev/kernel/src/KernelProcessScheduler.cc b/dev/kernel/src/KernelProcessScheduler.cc
index 2a2384e2..58137545 100644
--- a/dev/kernel/src/KernelProcessScheduler.cc
+++ b/dev/kernel/src/KernelProcessScheduler.cc
@@ -2,8 +2,8 @@
Copyright (C) 2025, Amlal El Mahrouss, all rights reserved.
- FILE: UserProcessScheduler.cc
- PURPOSE: Low level/Ring-3 Process scheduler.
+ FILE: KernelProcessScheduler.cc
+ PURPOSE: Privileged/Ring-0 process scheduler.
------------------------------------------- */
diff --git a/dev/kernel/src/MemoryMgr.cc b/dev/kernel/src/MemoryMgr.cc
index b064bafb..5c483ed5 100644
--- a/dev/kernel/src/MemoryMgr.cc
+++ b/dev/kernel/src/MemoryMgr.cc
@@ -108,7 +108,8 @@ namespace Kernel
if (!ptr_heap || new_sz < 1)
return nullptr;
- kout << "This function is not implemented by NeOSKrnl, please use the BSD's realloc instead.\r";
+ kout << "This function is not implemented by the kernel itself.\r";
+
ke_panic(RUNTIME_CHECK_INVALID);
return nullptr;
diff --git a/dev/kernel/src/ThreadLocalStorage.cc b/dev/kernel/src/ThreadLocalStorage.cc
index 314e7583..79d2ef5f 100644
--- a/dev/kernel/src/ThreadLocalStorage.cc
+++ b/dev/kernel/src/ThreadLocalStorage.cc
@@ -1,7 +1,7 @@
/*
* ========================================================
*
- * neoskrnl
+* NeKernel
* Copyright (C) 2024-2025, Amlal El Mahrouss, all rights reserved.
*
* ========================================================
diff --git a/dev/modules/CoreGfx/CoreAccess.h b/dev/modules/CoreGfx/CoreAccess.h
index adc9ed33..b3d17a59 100644
--- a/dev/modules/CoreGfx/CoreAccess.h
+++ b/dev/modules/CoreGfx/CoreAccess.h
@@ -4,8 +4,8 @@
------------------------------------------- */
-#ifndef GFX_MGR_ACCESSIBILITY_H
-#define GFX_MGR_ACCESSIBILITY_H
+#ifndef CORE_GFX_ACCESSIBILITY_H
+#define CORE_GFX_ACCESSIBILITY_H
#include <NewKit/NewKit.h>
#include <KernelKit/KPC.h>
@@ -38,4 +38,4 @@ namespace FB
};
} // namespace FB
-#endif // !GFX_MGR_ACCESSIBILITY_H_
+#endif // !CORE_GFX_ACCESSIBILITY_H_
diff --git a/dev/modules/CoreGfx/CoreGfx.h b/dev/modules/CoreGfx/CoreGfx.h
index df22fed0..eda52520 100644
--- a/dev/modules/CoreGfx/CoreGfx.h
+++ b/dev/modules/CoreGfx/CoreGfx.h
@@ -129,15 +129,13 @@
#define FBDrawInRegionA(clr, height, width, base_x, base_y)
#endif // __NE_AMD64__
-#ifndef GFX_MGR_ACCESSIBILITY_H
+#ifndef CORE_GFX_ACCESSIBILITY_H
#include <modules/CoreGfx/CoreAccess.h>
-#endif // ifndef GFX_MGR_ACCESSIBILITY_H
+#endif // ifndef CORE_GFX_ACCESSIBILITY_H
namespace FB
{
- struct FB_CONTROL_BLOCK;
-
- inline void fb_clear_video() noexcept
+ inline Void fb_clear_video() noexcept
{
fb_init();
@@ -146,5 +144,4 @@ namespace FB
fb_clear();
}
-
} // namespace FB \ No newline at end of file
diff --git a/dev/modules/CoreGfx/MathGfx.h b/dev/modules/CoreGfx/MathGfx.h
index 655903e2..f03e2f19 100644
--- a/dev/modules/CoreGfx/MathGfx.h
+++ b/dev/modules/CoreGfx/MathGfx.h
@@ -11,7 +11,7 @@
namespace UI
{
-#ifdef NE_GFX_MGR_USE_DOUBLE
+#ifdef NE_CORE_GFX_USE_DOUBLE
typedef double fb_real_t;
#else
typedef float fb_real_t;
diff --git a/dev/modules/MBCI/MBCI.h b/dev/modules/MBCI/MBCI.h
index 975fa7fe..ebc73f69 100644
--- a/dev/modules/MBCI/MBCI.h
+++ b/dev/modules/MBCI/MBCI.h
@@ -7,9 +7,13 @@
#ifndef _INC_MODULE_MBCI_H_
#define _INC_MODULE_MBCI_H_
+#include <hint/CompilerHint.h>
#include <NewKit/Defines.h>
#include <modules/ACPI/ACPI.h>
+/// @file MBCI.h
+/// @brief Mini Bus Controller Interface.
+
/**
- VCC (IN) (OUT for MCU)
- CLK (IN) (OUT for MCU)
@@ -22,8 +26,9 @@
*/
#define kMBCIZeroSz (8)
+#define kMBCIESBSz (64)
-namespace NeOS
+namespace Kernel
{
struct IMBCIHost;
@@ -53,14 +58,15 @@ namespace NeOS
UInt64 BaseAddressRegister;
UInt64 BaseAddressRegisterSize;
UInt32 CommandIssue;
- Char Zero[kMBCIZeroSz];
+ UInt8 Esb[kMBCIESBSz]; // Extended Signature Block
+ UInt8 Zero[kMBCIZeroSz];
};
/// @brief MBCI host flags.
enum MBCIHostFlags
{
kMBCIHostFlagsSupportsNothing, // Invalid MBCI device.
- kMBCIHostFlagsSupportsAPM, // Advanced Power Management.
+ kMBCIHostFlagsSupportsAPM, // FW's Advanced Power Management.
kMBCIHostFlagsSupportsDaisyChain, // Is daisy chained.
kMBCIHostFlagsSupportsHWInterrupts, // Has HW interrupts.
kMBCIHostFlagsSupportsDMA, // Has DMA.
@@ -93,8 +99,33 @@ namespace NeOS
kMBCIHostStateCount,
};
- /// @brief An AuthKey is a context used to decrpy data from an MBCI packet.
- typedef UInt64 MBCIAuthKeyType;
-} // namespace NeOS
+ /// @brief An AuthKey is a context used to tokenize data for an MBCI packet.
+ typedef UInt32 MBCIAuthKeyType;
+
+ /// @brief Read Auth key for MBCI host.
+ /// @param host the mbci host to get the key on.
+ /// @return the 24-bit key.
+ inline MBCIAuthKeyType mbci_read_auth_key(_Input volatile struct IMBCIHost* host)
+ {
+ constexpr auto const kChallengeMBCI = 0xdeadbeef;
+
+ host->MMIOTest = kChallengeMBCI;
+
+ if (host->MMIOTest == kChallengeMBCI)
+ {
+ return (host->Esb[kMBCIESBSz - 1] << 16) | (host->Esb[kMBCIESBSz - 2] << 8) | (host->Esb[kMBCIESBSz - 3] & 0xFF);
+ }
+
+ return kChallengeMBCI;
+ }
+
+ inline BOOL mbci_test_mmio(_Input volatile struct IMBCIHost* host)
+ {
+ constexpr auto const kChallengeMBCI = 0xdeadbeef;
+
+ host->MMIOTest = kChallengeMBCI;
+ return host->MMIOTest == kChallengeMBCI;
+ }
+} // namespace Kernel
#endif // ifndef _INC_MODULE_MBCI_H_ \ No newline at end of file
diff --git a/dev/modules/NVME/NVME.h b/dev/modules/NVME/NVME.h
index 42edd149..f58aacf9 100644
--- a/dev/modules/NVME/NVME.h
+++ b/dev/modules/NVME/NVME.h
@@ -15,7 +15,7 @@
#include <NewKit/Defines.h>
/// @file NVME.h
-/// @brief NVME driver.
+/// @brief Non Volatile Memory.
#define NE_ALIGN_NVME ATTRIBUTE(aligned(sizeof(Kernel::UInt32)))
@@ -46,7 +46,7 @@ namespace Kernel
enum
{
- kInvalidNVME,
+ kInvalidNVME = 0xFF,
kCreateCompletionQueueNVME = 0x05,
kCreateSubmissionQueueNVME = 0x01,
kIdentifyNVME = 0x06,