summaryrefslogtreecommitdiffhomepage
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
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>
-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
-rw-r--r--docs/md/SPECIFICATION_KERNEL.md2
-rw-r--r--docs/md/SPECIFICATION_MBCI.md34
-rw-r--r--public/frameworks/CoreFoundation.fwrk/headers/Foundation.h2
-rwxr-xr-xsetup_amd64.sh11
23 files changed, 127 insertions, 45 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,
diff --git a/docs/md/SPECIFICATION_KERNEL.md b/docs/md/SPECIFICATION_KERNEL.md
index d9a58d32..ae283428 100644
--- a/docs/md/SPECIFICATION_KERNEL.md
+++ b/docs/md/SPECIFICATION_KERNEL.md
@@ -10,7 +10,7 @@
===================================
-# 1: The Kernel (NeOSKrnl)
+# 1: The Kernel (NeKernel)
===================================
diff --git a/docs/md/SPECIFICATION_MBCI.md b/docs/md/SPECIFICATION_MBCI.md
new file mode 100644
index 00000000..63452a85
--- /dev/null
+++ b/docs/md/SPECIFICATION_MBCI.md
@@ -0,0 +1,34 @@
+===================================
+
+# 0: General Information
+
+===================================
+
+- High Speed Bus Format.
+- Designed for keyboards, mouses, interfaces.
+- A open and cheap alternative to other HCIs.
+
+===================================
+
+# 1: Concepts
+
+===================================
+
+- MBCI Host
+- MBCI Authentication key (24-bit number)
+- MBCI Host Kind and Flags.
+
+===================================
+
+# 2: Pinout
+
+===================================
+
+- VCC (IN) (OUT for MCU)
+- CLK (IN) (OUT for MCU)
+- ACK (BI) (Contains an Acknowledge Packet Frame)
+- D0- (IN) (Starts with the Host Interface Packet Frame)
+- D1- (IN) (Starts with the Host Interface Packet Frame)
+- D0+ (OUT) (Starts with the Host Interface Packet Frame)
+- D1+ (OUT) (Starts with the Host Interface Packet Frame)
+- GND (IN) (OUT for MCU) \ No newline at end of file
diff --git a/public/frameworks/CoreFoundation.fwrk/headers/Foundation.h b/public/frameworks/CoreFoundation.fwrk/headers/Foundation.h
index 15b10e06..b1c37635 100644
--- a/public/frameworks/CoreFoundation.fwrk/headers/Foundation.h
+++ b/public/frameworks/CoreFoundation.fwrk/headers/Foundation.h
@@ -18,7 +18,7 @@ namespace CF
class CFGUID;
class CFProperty;
class CFObject;
-
+
template <typename T>
class CFRef;
class CFFont;
diff --git a/setup_amd64.sh b/setup_amd64.sh
index b211b4bc..717f7840 100755
--- a/setup_amd64.sh
+++ b/setup_amd64.sh
@@ -1,11 +1,18 @@
#!/bin/sh
# LOG HISTORY:
-# 25/03/25: Add 'disk' build step.
+# 03/25/25: Add 'disk' build step.
+# 04/05/25: Improve and fix script.
cd dev/boot/modules/SysChk
btb amd64.json
-cd ../../
+cd ../
+cd BootNet
+btb amd64.json
+cd ../../../
+cd user
+btb user.json
+cd ../boot
make -f amd64-desktop.make efi
make -f amd64-desktop.make disk
make -f amd64-desktop.make epm-img