summaryrefslogtreecommitdiffhomepage
path: root/Kernel
diff options
context:
space:
mode:
authorAmlal <amlalelmahrouss@icloud.com>2024-06-06 10:27:55 +0000
committerAmlal <amlalelmahrouss@icloud.com>2024-06-06 10:27:55 +0000
commit4e75e05a20ddd0dbca982e8f3bc2ea8043ed3a3f (patch)
tree95409c0e32b644578b94a5c230417da684d79dc9 /Kernel
parentf5081a8f9a8537ad5be5d639955cd1d0e68a9e1d (diff)
parent9994b8f3f88131f41be1061fb0947177e66dc7b0 (diff)
Merged in MHR-23 (pull request #14)
Draft: MHR-23
Diffstat (limited to 'Kernel')
-rw-r--r--Kernel/ArchKit/ArchKit.hpp41
-rw-r--r--Kernel/Builtins/ACPI/ACPI.hxx23
-rw-r--r--Kernel/Docs/Explicit Partition Map.pdfbin0 -> 12326 bytes
-rw-r--r--Kernel/Docs/SPECIFICATION.md2
-rw-r--r--Kernel/Docs/TODO-LIST.md2
-rw-r--r--Kernel/DriverKit/KernelCall.c25
-rw-r--r--Kernel/DriverKit/KernelDev.c37
-rw-r--r--Kernel/DriverKit/KernelDev.h33
-rw-r--r--Kernel/DriverKit/KernelDispatchCall.S21
-rw-r--r--Kernel/DriverKit/KernelPrint.c33
-rw-r--r--Kernel/DriverKit/KernelPrint.h18
-rw-r--r--Kernel/DriverKit/KernelStd.h22
-rw-r--r--Kernel/DriverKit/KernelStdCxx.cc24
-rw-r--r--Kernel/DriverKit/KernelString.c34
-rw-r--r--Kernel/DriverKit/KernelString.h16
-rw-r--r--Kernel/Drivers/.gitkeep0
-rw-r--r--Kernel/Drivers/Bonjour/Bonjour.c20
-rw-r--r--Kernel/Drivers/Bonjour/DriverRsrc.rsrc25
-rw-r--r--Kernel/Drivers/Bonjour/x86_64.mk52
-rw-r--r--Kernel/Drivers/MahroussUpdate/DriverRsrc.rsrc25
-rw-r--r--Kernel/Drivers/MahroussUpdate/MahroussUpdate.cc24
-rw-r--r--Kernel/Drivers/MahroussUpdate/MahroussUpdate.hxx37
-rw-r--r--Kernel/Drivers/MahroussUpdate/x86_64.mk53
-rw-r--r--Kernel/Drivers/SampleDriver/DriverRsrc.rsrc25
-rw-r--r--Kernel/Drivers/SampleDriver/SampleDriver.c25
-rw-r--r--Kernel/Drivers/SampleDriver/x86_64.mk52
-rw-r--r--Kernel/HALKit/AMD64/HalACPIFactoryInterface.cxx37
-rw-r--r--Kernel/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cpp52
-rw-r--r--Kernel/HALKit/AMD64/HalCoreMultiProcessingAMD64.cpp50
-rw-r--r--Kernel/HALKit/AMD64/HalDebugOutput.cxx2
-rw-r--r--Kernel/HALKit/AMD64/HalKernelMain.cxx2
-rw-r--r--Kernel/HALKit/AMD64/HalSMPCore.cxx2
-rw-r--r--Kernel/HALKit/AMD64/Processor.hpp65
-rw-r--r--Kernel/HALKit/AMD64/Storage/AHCI.cxx2
-rw-r--r--Kernel/KernelKit/DebugOutput.hpp18
-rw-r--r--Kernel/KernelKit/DeviceManager.hpp4
-rw-r--r--Kernel/KernelKit/DriveManager.hxx8
-rw-r--r--Kernel/KernelKit/Framebuffer.hpp1
-rw-r--r--Kernel/KernelKit/KernelHeap.hpp5
-rw-r--r--Kernel/KernelKit/PEF.hpp2
-rw-r--r--Kernel/KernelKit/ProcessScheduler.hxx (renamed from Kernel/KernelKit/ProcessScheduler.hpp)10
-rw-r--r--Kernel/KernelKit/SMPManager.hpp2
-rw-r--r--Kernel/KernelKit/ThreadLocalStorage.inl10
-rw-r--r--Kernel/KernelKit/XCOFF.hxx24
-rw-r--r--Kernel/KernelRsrc.rsrc8
-rw-r--r--Kernel/Linker/16x0.json2
-rw-r--r--Kernel/Linker/32x0.json2
-rw-r--r--Kernel/Linker/64x0.json2
-rw-r--r--Kernel/NetworkKit/NetworkDevice.inl4
-rw-r--r--Kernel/Sources/AppMain.cxx28
-rw-r--r--Kernel/Sources/CodeManager.cxx4
-rw-r--r--Kernel/Sources/CxxAbi.cxx2
-rw-r--r--Kernel/Sources/FS/NewFS.cxx55
-rw-r--r--Kernel/Sources/IndexableProperty.cxx2
-rw-r--r--Kernel/Sources/KernelCheck.cxx4
-rw-r--r--Kernel/Sources/KernelHeap.cxx27
-rw-r--r--Kernel/Sources/PEFCodeManager.cxx4
-rw-r--r--Kernel/Sources/PEFSharedObject.cxx (renamed from Kernel/Sources/PEFSharedObjectRT.cxx)15
-rw-r--r--Kernel/Sources/ProcessScheduler.cxx42
-rw-r--r--Kernel/Sources/ProcessTeam.cxx2
-rw-r--r--Kernel/Sources/SMPManager.cxx8
-rw-r--r--Kernel/Sources/Semaphore.cxx2
-rw-r--r--Kernel/Sources/ThreadLocalStorage.cxx10
-rw-r--r--Kernel/Sources/UserHeap.cxx10
-rw-r--r--Kernel/makefile4
65 files changed, 411 insertions, 791 deletions
diff --git a/Kernel/ArchKit/ArchKit.hpp b/Kernel/ArchKit/ArchKit.hpp
index 83770272..fa899984 100644
--- a/Kernel/ArchKit/ArchKit.hpp
+++ b/Kernel/ArchKit/ArchKit.hpp
@@ -34,6 +34,47 @@ namespace NewOS
return hash;
}
+
+ /// @brief write to mapped memory register
+ /// @param base the base address.
+ /// @param reg the register.
+ /// @param value the write to write on it.
+ inline void ke_dma_write(UInt32 base, UInt32 reg, UInt32 value) noexcept
+ {
+ *(volatile UInt32*)((UInt64)base + reg) = value;
+ }
+
+ /// @brief read from mapped memory register.
+ /// @param base base address
+ /// @param reg the register.
+ /// @return the value inside the register.
+ inline UInt32 ke_dma_read(UInt32 base, UInt32 reg) noexcept
+ {
+ return *(volatile UInt32*)((UInt64)base + reg);
+ }
+
+ /// @brief Print a region of memory.
+ /// @param start
+ /// @param length
+ inline void ke_print_raw_memory(const void* start, Size length)
+ {
+ const UInt8* ptr = (const UInt8*)start;
+ for (Size i = 0; i < length; i++)
+ {
+ if (i % 16 == 0)
+ {
+ kcout << hex_number((UIntPtr)ptr + i);
+ }
+ else
+ {
+ kcout << hex_number(ptr[i]);
+ }
+
+ kcout << " ";
+ }
+
+ kcout << "\r";
+ }
} // namespace NewOS
#define kKernelMaxSystemCalls (256)
diff --git a/Kernel/Builtins/ACPI/ACPI.hxx b/Kernel/Builtins/ACPI/ACPI.hxx
index 13ea6ecc..430a39f4 100644
--- a/Kernel/Builtins/ACPI/ACPI.hxx
+++ b/Kernel/Builtins/ACPI/ACPI.hxx
@@ -15,7 +15,7 @@
namespace NewOS
{
- class SDT
+ class PACKED SDT
{
public:
Char Signature[4];
@@ -29,7 +29,7 @@ namespace NewOS
UInt32 CreatorRevision;
};
- class RSDP : public SDT
+ class PACKED RSDP : public SDT
{
public:
UInt32 RsdtAddress;
@@ -38,7 +38,7 @@ namespace NewOS
UInt8 Reserved0[3];
};
- class ConfigHeader
+ class PACKED ConfigHeader
{
public:
UInt64 BaseAddress;
@@ -59,7 +59,7 @@ namespace NewOS
Invalid = 0xFF,
};
- class Address
+ class PACKED Address
{
public:
AddressSpace AddressSpaceId;
@@ -68,6 +68,21 @@ namespace NewOS
UInt8 Reserved;
UIntPtr Address;
};
+
+ class PACKED RSDT
+ {
+ public:
+ Char Signature[4];
+ UInt32 Length;
+ UInt8 Revision;
+ Char Checksum;
+ Char OemId[6];
+ Char OemTableId[8];
+ UInt32 OemRev;
+ UInt32 CreatorID;
+ UInt32 CreatorRevision;
+ UInt32 AddressArr[];
+ };
} // namespace NewOS
#endif // !__ACPI__
diff --git a/Kernel/Docs/Explicit Partition Map.pdf b/Kernel/Docs/Explicit Partition Map.pdf
new file mode 100644
index 00000000..1e2f5318
--- /dev/null
+++ b/Kernel/Docs/Explicit Partition Map.pdf
Binary files differ
diff --git a/Kernel/Docs/SPECIFICATION.md b/Kernel/Docs/SPECIFICATION.md
index e218947e..6f9ac3d3 100644
--- a/Kernel/Docs/SPECIFICATION.md
+++ b/Kernel/Docs/SPECIFICATION.md
@@ -51,7 +51,7 @@
===================================
-# 4: The NewBoot
+# 4: The newosldr
===================================
diff --git a/Kernel/Docs/TODO-LIST.md b/Kernel/Docs/TODO-LIST.md
index b7780b9f..ed7b1cf9 100644
--- a/Kernel/Docs/TODO-LIST.md
+++ b/Kernel/Docs/TODO-LIST.md
@@ -18,6 +18,6 @@
Status:
-NewBoot: Need to boot from EPM partition.
+newosldr: Need to boot from EPM partition.
<br>
NewKernel: New Filesystem in progress.
diff --git a/Kernel/DriverKit/KernelCall.c b/Kernel/DriverKit/KernelCall.c
deleted file mode 100644
index d61f8439..00000000
--- a/Kernel/DriverKit/KernelCall.c
+++ /dev/null
@@ -1,25 +0,0 @@
-/* -------------------------------------------
-
- Copyright SoftwareLabs
-
- Purpose: Kernel Definitions.
-
-------------------------------------------- */
-
-#include <DriverKit/KernelStd.h>
-#include <stdarg.h>
-
-DK_EXTERN __attribute__((naked)) void __kernelDispatchCall(int32_t cnt, ...);
-
-DK_EXTERN void* kernelCall(const char* kernelRpcName, int32_t cnt, ...)
-{
- if (!kernelRpcName || cnt == 0)
- return NIL;
-
- va_list arg;
- va_start(arg, cnt);
-
- __kernelDispatchCall(cnt, arg);
-
- va_end(arg);
-}
diff --git a/Kernel/DriverKit/KernelDev.c b/Kernel/DriverKit/KernelDev.c
deleted file mode 100644
index 704f17da..00000000
--- a/Kernel/DriverKit/KernelDev.c
+++ /dev/null
@@ -1,37 +0,0 @@
-/* -------------------------------------------
-
- Copyright SoftwareLabs
-
- Purpose: Kernel Text I/O.
-
-------------------------------------------- */
-
-#include <DriverKit/KernelDev.h>
-
-/// @brief Open a new binary device from path.
-DK_EXTERN kernelDeviceRef kernelOpenBinaryDevice(const char* devicePath)
-{
- if (!devicePath)
- return NIL;
-
- return kernelCall("OpenBinaryDevice", 1, devicePath);
-}
-
-/// @brief Open a new character device from path.
-DK_EXTERN kernelDeviceRef kernelOpenCharDevice(const char* devicePath)
-{
- if (!devicePath)
- return NIL;
-
- return kernelCall("OpenCharDevice", 1, devicePath);
-}
-
-/// @brief Close any device.
-/// @param device valid device.
-DK_EXTERN void kernelCloseDevice(kernelDeviceRef device)
-{
- if (!device)
- return;
-
- kernelCall("CloseDevice", 1, device);
-}
diff --git a/Kernel/DriverKit/KernelDev.h b/Kernel/DriverKit/KernelDev.h
deleted file mode 100644
index c3435e8d..00000000
--- a/Kernel/DriverKit/KernelDev.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/* -------------------------------------------
-
- Copyright SoftwareLabs
-
- Purpose: Kernel Devices.
-
-------------------------------------------- */
-
-#pragma once
-
-#include <DriverKit/KernelStd.h>
-
-struct _kernelDevice;
-
-/// @brief Kernel Device driver.
-typedef struct _kernelDevice
-{
- char name[255]; // the device name. Could be /./DEVICE_NAME/
- int32_t (*read)(); // read from device.
- int32_t (*write)(); // write to device.
- struct _kernelDevice* (*open)(const char* path); // open device.
- void (*close)(struct _kernelDevice* dev); // close device.
-} kernelDevice, *kernelDeviceRef;
-
-/// @brief Open a new binary device from path.
-DK_EXTERN kernelDeviceRef kernelOpenBinaryDevice(const char* devicePath);
-
-/// @brief Open a new character device from path.
-DK_EXTERN kernelDeviceRef kernelOpenCharDevice(const char* devicePath);
-
-/// @brief Close any device.
-/// @param device valid device.
-DK_EXTERN void kernelCloseDevice(kernelDeviceRef device);
diff --git a/Kernel/DriverKit/KernelDispatchCall.S b/Kernel/DriverKit/KernelDispatchCall.S
deleted file mode 100644
index 64b6663e..00000000
--- a/Kernel/DriverKit/KernelDispatchCall.S
+++ /dev/null
@@ -1,21 +0,0 @@
-.globl __kernelDispatchCall
-
-.section .text
-
-/* Really simple function, takes our va-list,
- and brings it to the trap handler in the kernel. */
-
-#ifdef __x86_64__
-
-__kernelDispatchCall:
- int $0x33
- ret
-
-#elif defined(__powerpc64__)
-
-__kernelDispatchCall:
- /* There is no specific interrupt request id for a system call in POWER. */
- sc
- blr
-
-#endif
diff --git a/Kernel/DriverKit/KernelPrint.c b/Kernel/DriverKit/KernelPrint.c
deleted file mode 100644
index 533bf34a..00000000
--- a/Kernel/DriverKit/KernelPrint.c
+++ /dev/null
@@ -1,33 +0,0 @@
-/* -------------------------------------------
-
- Copyright SoftwareLabs
-
- Purpose: Kernel Text I/O.
-
-------------------------------------------- */
-
-#include <DriverKit/KernelPrint.h>
-
-DK_EXTERN void kernelPrintChar(const char ch)
-{
- kernelCall("WriteCharacter", 1, ch);
-}
-
-/// @brief print string to UART.
-/// @param message UART to transmit.
-DK_EXTERN void kernelPrintStr(const char* message)
-{
- if (!message)
- return;
- if (*message == 0)
- return;
-
- size_t index = 0;
- size_t len = kernelStringLength(message);
-
- while (index < len)
- {
- kernelPrintChar(message[index]);
- ++index;
- }
-}
diff --git a/Kernel/DriverKit/KernelPrint.h b/Kernel/DriverKit/KernelPrint.h
deleted file mode 100644
index 7bf0dda9..00000000
--- a/Kernel/DriverKit/KernelPrint.h
+++ /dev/null
@@ -1,18 +0,0 @@
-/* -------------------------------------------
-
- Copyright SoftwareLabs
-
- Purpose: Kernel Text I/O.
-
-------------------------------------------- */
-
-#pragma once
-
-#include <DriverKit/KernelString.h>
-
-/// @brief print character into UART.
-DK_EXTERN void kernelPrintChar(const char ch);
-
-/// @brief print string to UART.
-/// @param message UART to transmit.
-DK_EXTERN void kernelPrintStr(const char* message);
diff --git a/Kernel/DriverKit/KernelStd.h b/Kernel/DriverKit/KernelStd.h
deleted file mode 100644
index b0dba70e..00000000
--- a/Kernel/DriverKit/KernelStd.h
+++ /dev/null
@@ -1,22 +0,0 @@
-/* -------------------------------------------
-
- Copyright SoftwareLabs
-
- Purpose: Kernel Definitions.
-
-------------------------------------------- */
-
-#pragma once
-
-#if defined(__cplusplus)
-#define DK_EXTERN extern "C"
-#define NIL nullptr
-#else
-#define DK_EXTERN extern
-#define NIL NULL
-#endif // defined(__cplusplus)
-
-#include <stdint.h>
-#include <stddef.h>
-
-DK_EXTERN void* kernelCall(const char* kernelRpcName, int32_t cnt, ...);
diff --git a/Kernel/DriverKit/KernelStdCxx.cc b/Kernel/DriverKit/KernelStdCxx.cc
deleted file mode 100644
index 99bcc579..00000000
--- a/Kernel/DriverKit/KernelStdCxx.cc
+++ /dev/null
@@ -1,24 +0,0 @@
-/* -------------------------------------------
-
- Copyright SoftwareLabs
-
- Purpose: Driver C++ Definitions.
-
-------------------------------------------- */
-
-#include <DriverKit/KernelStd.h>
-
-void* operator new(size_t sz) {
- if (!sz) ++sz;
-
- auto ptr = kernelCall("NewKernelHeap", 1, sz);
- kernelCall("KernelHeapProtect", 1, ptr);
-
- return ptr;
-}
-
-void operator delete(void* ptr) noexcept {
- if (!ptr) return;
-
- kernelCall("DeleteKernelHeap", 1,ptr);
-}
diff --git a/Kernel/DriverKit/KernelString.c b/Kernel/DriverKit/KernelString.c
deleted file mode 100644
index 6f28f4d8..00000000
--- a/Kernel/DriverKit/KernelString.c
+++ /dev/null
@@ -1,34 +0,0 @@
-/* -------------------------------------------
-
- Copyright SoftwareLabs
-
- Purpose: Kernel Strings.
-
-------------------------------------------- */
-
-#include <DriverKit/KernelString.h>
-
-DK_EXTERN size_t kernelStringLength(const char* str)
-{
- size_t index = 0;
-
- while (str[index] != 0)
- {
- ++index;
- }
-
- return index;
-}
-
-DK_EXTERN int kernelStringCopy(char* dst, const char* src, size_t len)
-{
- size_t index = 0;
-
- while (index != len)
- {
- dst[index] = src[index];
- ++index;
- }
-
- return index;
-}
diff --git a/Kernel/DriverKit/KernelString.h b/Kernel/DriverKit/KernelString.h
deleted file mode 100644
index db063a1b..00000000
--- a/Kernel/DriverKit/KernelString.h
+++ /dev/null
@@ -1,16 +0,0 @@
-/* -------------------------------------------
-
- Copyright SoftwareLabs
-
- Purpose: Kernel Strings.
-
-------------------------------------------- */
-
-#pragma once
-
-#include <DriverKit/KernelStd.h>
-
-/// @brief DriverKit equivalent of POSIX's string.h.
-
-DK_EXTERN size_t kernelStringLength(const char* str);
-DK_EXTERN int kernelStringCopy(char* dst, const char* src, size_t len);
diff --git a/Kernel/Drivers/.gitkeep b/Kernel/Drivers/.gitkeep
deleted file mode 100644
index e69de29b..00000000
--- a/Kernel/Drivers/.gitkeep
+++ /dev/null
diff --git a/Kernel/Drivers/Bonjour/Bonjour.c b/Kernel/Drivers/Bonjour/Bonjour.c
deleted file mode 100644
index 52187ac1..00000000
--- a/Kernel/Drivers/Bonjour/Bonjour.c
+++ /dev/null
@@ -1,20 +0,0 @@
-/* -------------------------------------------
-
- Copyright SoftwareLabs
-
-------------------------------------------- */
-
-#include <DriverKit/KernelString.h>
-#include <DriverKit/KernelPrint.h>
-
-int __ImageStart(void)
-{
- kernelPrintStr("Bonjour: Starting up zeroconf...\r");
- return 0;
-}
-
-int __ImageEnd(void)
-{
- kernelPrintStr("Bonjour: Shutting down zeroconf...\r");
- return 0;
-}
diff --git a/Kernel/Drivers/Bonjour/DriverRsrc.rsrc b/Kernel/Drivers/Bonjour/DriverRsrc.rsrc
deleted file mode 100644
index 494e85ee..00000000
--- a/Kernel/Drivers/Bonjour/DriverRsrc.rsrc
+++ /dev/null
@@ -1,25 +0,0 @@
-1 ICON "../../Root/Boot/Icons/bonjour-logo.ico"
-
-1 VERSIONINFO
-FILEVERSION 1,0,0,0
-PRODUCTVERSION 1,0,0,0
-BEGIN
- BLOCK "StringFileInfo"
- BEGIN
- BLOCK "080904E4"
- BEGIN
- VALUE "CompanyName", "SoftwareLabs"
- VALUE "FileDescription", "New OS Bonjour driver."
- VALUE "FileVersion", "1.00"
- VALUE "InternalName", "Bonjour."
- VALUE "LegalCopyright", "Copyright SoftwareLabs, all rights reserved."
- VALUE "OriginalFilename", "Bonjour.exe"
- VALUE "ProductName", "Bonjour."
- VALUE "ProductVersion", "1.00"
- END
- END
- BLOCK "VarFileInfo"
- BEGIN
- VALUE "Translation", 0x809, 1252
- END
-END
diff --git a/Kernel/Drivers/Bonjour/x86_64.mk b/Kernel/Drivers/Bonjour/x86_64.mk
deleted file mode 100644
index b2493edf..00000000
--- a/Kernel/Drivers/Bonjour/x86_64.mk
+++ /dev/null
@@ -1,52 +0,0 @@
-##################################################
-# (C) SoftwareLabs, all rights reserved.
-# This is the sample driver makefile.
-##################################################
-
-CC_GNU=x86_64-w64-mingw32-gcc
-LD_GNU=x86_64-w64-mingw32-ld
-
-WINDRES=x86_64-w64-mingw32-windres
-
-ADD_FILE=touch
-COPY=cp
-HTTP_GET=wget
-
-LD_FLAGS=-e __ImageStart --subsystem=17
-
-OBJ=*.o
-
-
-REM=rm
-REM_FLAG=-f
-
-FLAG_ASM=-f win64
-FLAG_GNU=-fshort-wchar -D__EFI_x86_64__ -mgeneral-regs-only -mno-red-zone -D__KERNEL__ -DEFI_FUNCTION_WRAPPER -I../ -I../../ -I./ -c -ffreestanding -std=c17 -D__HAVE_MAHROUSS_APIS__ -D__MAHROUSS__ -D__BOOTLOADER__ -I./
-
-.PHONY: invalid-recipe
-invalid-recipe:
- @echo "invalid-recipe: Use make all instead."
-
-.PHONY: all
-all: compile-amd64
- $(LD_GNU) $(OBJ) $(LD_FLAGS) -o Bonjour.exe
- cp Bonjour.exe ../../Root/Boot/Bonjour.exe
-
-ifneq ($(DEBUG_SUPPORT), )
-DEBUG = -D__DEBUG__
-endif
-
-.PHONY: compile-amd64
-compile-amd64:
- $(WINDRES) DriverRsrc.rsrc -O coff -o DriverRsrc.o
- $(CC_GNU) $(FLAG_GNU) $(DEBUG) $(wildcard *.c) $(wildcard ../../DriverKit/*.c) $(wildcard ../../DriverKit/*.S)
-
-.PHONY: clean
-clean:
- $(REM) $(REM_FLAG) $(OBJ) Bonjour.exe
-
-.PHONY: help
-help:
- @echo "=== HELP ==="
- @echo "clean: Clean driver."
- @echo "compile-amd64: Build driver."
diff --git a/Kernel/Drivers/MahroussUpdate/DriverRsrc.rsrc b/Kernel/Drivers/MahroussUpdate/DriverRsrc.rsrc
deleted file mode 100644
index 88261a47..00000000
--- a/Kernel/Drivers/MahroussUpdate/DriverRsrc.rsrc
+++ /dev/null
@@ -1,25 +0,0 @@
-1 ICON "../../Root/Boot/Icons/update-logo.ico"
-
-1 VERSIONINFO
-FILEVERSION 1,0,0,0
-PRODUCTVERSION 1,0,0,0
-BEGIN
- BLOCK "StringFileInfo"
- BEGIN
- BLOCK "080904E4"
- BEGIN
- VALUE "CompanyName", "SoftwareLabs"
- VALUE "FileDescription", "New OS Mahrouss Update driver."
- VALUE "FileVersion", "1.00"
- VALUE "InternalName", "Mahrouss Update."
- VALUE "LegalCopyright", "Copyright SoftwareLabs, all rights reserved."
- VALUE "OriginalFilename", "MahroussUpdate.exe"
- VALUE "ProductName", "MahroussUpdate."
- VALUE "ProductVersion", "1.00"
- END
- END
- BLOCK "VarFileInfo"
- BEGIN
- VALUE "Translation", 0x809, 1252
- END
-END
diff --git a/Kernel/Drivers/MahroussUpdate/MahroussUpdate.cc b/Kernel/Drivers/MahroussUpdate/MahroussUpdate.cc
deleted file mode 100644
index eb8d03c7..00000000
--- a/Kernel/Drivers/MahroussUpdate/MahroussUpdate.cc
+++ /dev/null
@@ -1,24 +0,0 @@
-/* -------------------------------------------
-
- Copyright SoftwareLabs
-
-------------------------------------------- */
-
-#include <DriverKit/KernelString.h>
-#include <DriverKit/KernelPrint.h>
-
-#include <Drivers/MahroussUpdate/MahroussUpdate.hxx>
-
-DK_EXTERN int __ImageStart(void) {
- kernelPrintStr("Mahrouss Update: Looking for updates...\r");
- UpdateRequest req("mup://release-mahrouss.logic/newos/");
-
- return 0;
-}
-
-DK_EXTERN int __ImageEnd(void) {
- return 0;
-}
-
-///! @brief Use this to check your stack, if using MinGW/MSVC.
-DK_EXTERN void ___chkstk_ms(void) {}
diff --git a/Kernel/Drivers/MahroussUpdate/MahroussUpdate.hxx b/Kernel/Drivers/MahroussUpdate/MahroussUpdate.hxx
deleted file mode 100644
index dbcaed43..00000000
--- a/Kernel/Drivers/MahroussUpdate/MahroussUpdate.hxx
+++ /dev/null
@@ -1,37 +0,0 @@
-/* -------------------------------------------
-
- Copyright SoftwareLabs
-
-------------------------------------------- */
-
-#pragma once
-
-#include <DriverKit/KernelString.h>
-
-#include "DriverKit/KernelPrint.h"
-
-/// @file Software update job driver.
-
-class UpdateRequest;
-class UpdateRequestObserver;
-
-class UpdateRequest
-{
-public:
- explicit UpdateRequest(const char* patchUrl = "mup://invalid-url-scheme/")
- {
- kernelStringCopy(this->fPatchUrl, patchUrl, kernelStringLength(patchUrl));
-
- kernelPrintStr("Mahrouss Update, Looking at: ");
- kernelPrintStr(patchUrl);
- kernelPrintChar('\r');
- kernelPrintChar('\n');
- }
-
- ~UpdateRequest()
- {
- }
-
-private:
- char fPatchUrl[4096] = {0};
-};
diff --git a/Kernel/Drivers/MahroussUpdate/x86_64.mk b/Kernel/Drivers/MahroussUpdate/x86_64.mk
deleted file mode 100644
index 13b30d59..00000000
--- a/Kernel/Drivers/MahroussUpdate/x86_64.mk
+++ /dev/null
@@ -1,53 +0,0 @@
-##################################################
-# (C) SoftwareLabs, all rights reserved.
-# This is the sample driver makefile.
-##################################################
-
-CC_GNU=x86_64-w64-mingw32-gcc
-LD_GNU=x86_64-w64-mingw32-ld
-
-WINDRES=x86_64-w64-mingw32-windres
-
-ADD_FILE=touch
-COPY=cp
-HTTP_GET=wget
-
-LD_FLAGS=-e __ImageStart --subsystem=17
-
-OBJ=*.o
-
-
-REM=rm
-REM_FLAG=-f
-
-FLAG_ASM=-f win64
-FLAG_GNU=-fshort-wchar -D__EFI_x86_64__ -mgeneral-regs-only -mno-red-zone -D__KERNEL__ -DEFI_FUNCTION_WRAPPER -I../ -I../../ -I./ -c -ffreestanding -D__HAVE_MAHROUSS_APIS__ -D__MAHROUSS__ -D__BOOTLOADER__ -I./
-
-.PHONY: invalid-recipe
-invalid-recipe:
- @echo "invalid-recipe: Use make all instead."
-
-.PHONY: all
-all: compile-amd64
- $(LD_GNU) $(OBJ) $(LD_FLAGS) -o MahroussUpdate.exe
- cp MahroussUpdate.exe ../../Root/Boot/MahroussUpdate.exe
-
-ifneq ($(DEBUG_SUPPORT), )
-DEBUG = -D__DEBUG__
-endif
-
-.PHONY: compile-amd64
-compile-amd64:
- $(WINDRES) DriverRsrc.rsrc -O coff -o DriverRsrc.o
- $(CC_GNU) $(FLAG_GNU) -std=c17 $(DEBUG) $(wildcard *.c) $(wildcard ../../DriverKit/*.c) $(wildcard ../../DriverKit/*.S)
- $(CC_GNU) $(FLAG_GNU) -std=c++17 -fno-rtti -fno-exceptions $(DEBUG) $(wildcard *.cc) $(wildcard ../../DriverKit/*.cc)
-
-.PHONY: clean
-clean:
- $(REM) $(REM_FLAG) $(OBJ) MahroussUpdate.exe
-
-.PHONY: help
-help:
- @echo "=== HELP ==="
- @echo "clean: Clean driver."
- @echo "compile-amd64: Build driver."
diff --git a/Kernel/Drivers/SampleDriver/DriverRsrc.rsrc b/Kernel/Drivers/SampleDriver/DriverRsrc.rsrc
deleted file mode 100644
index 3a3b8774..00000000
--- a/Kernel/Drivers/SampleDriver/DriverRsrc.rsrc
+++ /dev/null
@@ -1,25 +0,0 @@
-1 ICON "../../Root/Boot/Icons/driver-logo.ico"
-
-1 VERSIONINFO
-FILEVERSION 1,0,0,0
-PRODUCTVERSION 1,0,0,0
-BEGIN
- BLOCK "StringFileInfo"
- BEGIN
- BLOCK "080904E4"
- BEGIN
- VALUE "CompanyName", "SoftwareLabs"
- VALUE "FileDescription", "New OS driver."
- VALUE "FileVersion", "1.00"
- VALUE "InternalName", "SampleDriver"
- VALUE "LegalCopyright", "Copyright SoftwareLabs, all rights reserved."
- VALUE "OriginalFilename", "SampleDriver.exe"
- VALUE "ProductName", "SampleDriver"
- VALUE "ProductVersion", "1.00"
- END
- END
- BLOCK "VarFileInfo"
- BEGIN
- VALUE "Translation", 0x809, 1252
- END
-END
diff --git a/Kernel/Drivers/SampleDriver/SampleDriver.c b/Kernel/Drivers/SampleDriver/SampleDriver.c
deleted file mode 100644
index b92b1ef8..00000000
--- a/Kernel/Drivers/SampleDriver/SampleDriver.c
+++ /dev/null
@@ -1,25 +0,0 @@
-/* -------------------------------------------
-
- Copyright SoftwareLabs
-
-------------------------------------------- */
-
-#include <DriverKit/KernelString.h>
-#include <DriverKit/KernelPrint.h>
-
-int __ImageStart(void)
-{
- kernelPrintStr("SampleDriver: Starting up...\r");
- return 0;
-}
-
-int __ImageEnd(void)
-{
- kernelPrintStr("SampleDriver: Shutting down...\r");
- return 0;
-}
-
-///! @brief Use this to check your stack, if using MinGW/MSVC.
-void ___chkstk_ms(void)
-{
-}
diff --git a/Kernel/Drivers/SampleDriver/x86_64.mk b/Kernel/Drivers/SampleDriver/x86_64.mk
deleted file mode 100644
index 5bdf0331..00000000
--- a/Kernel/Drivers/SampleDriver/x86_64.mk
+++ /dev/null
@@ -1,52 +0,0 @@
-##################################################
-# (C) SoftwareLabs, all rights reserved.
-# This is the sample driver makefile.
-##################################################
-
-CC_GNU=x86_64-w64-mingw32-gcc
-LD_GNU=x86_64-w64-mingw32-ld
-
-WINDRES=x86_64-w64-mingw32-windres
-
-ADD_FILE=touch
-COPY=cp
-HTTP_GET=wget
-
-LD_FLAGS=-e __ImageStart --subsystem=17
-
-OBJ=*.o
-
-
-REM=rm
-REM_FLAG=-f
-
-FLAG_ASM=-f win64
-FLAG_GNU=-fshort-wchar -D__EFI_x86_64__ -mgeneral-regs-only -mno-red-zone -D__KERNEL__ -DEFI_FUNCTION_WRAPPER -I../ -I../../ -I./ -c -ffreestanding -std=c17 -D__HAVE_MAHROUSS_APIS__ -D__MAHROUSS__ -D__BOOTLOADER__ -I./
-
-.PHONY: invalid-recipe
-invalid-recipe:
- @echo "invalid-recipe: Use make all instead."
-
-.PHONY: all
-all: compile-amd64
- $(LD_GNU) $(OBJ) $(LD_FLAGS) -o SampleDriver.exe
- cp SampleDriver.exe ../../Root/Boot/SampleDriver.exe
-
-ifneq ($(DEBUG_SUPPORT), )
-DEBUG = -D__DEBUG__
-endif
-
-.PHONY: compile-amd64
-compile-amd64:
- $(WINDRES) DriverRsrc.rsrc -O coff -o DriverRsrc.o
- $(CC_GNU) $(FLAG_GNU) $(DEBUG) $(wildcard *.c) $(wildcard ../../DriverKit/*.c) $(wildcard ../../DriverKit/*.S)
-
-.PHONY: clean
-clean:
- $(REM) $(REM_FLAG) $(OBJ) SampleDriver.exe
-
-.PHONY: help
-help:
- @echo "=== HELP ==="
- @echo "clean: Clean driver."
- @echo "compile-amd64: Build driver."
diff --git a/Kernel/HALKit/AMD64/HalACPIFactoryInterface.cxx b/Kernel/HALKit/AMD64/HalACPIFactoryInterface.cxx
index ff5372f4..14241f60 100644
--- a/Kernel/HALKit/AMD64/HalACPIFactoryInterface.cxx
+++ b/Kernel/HALKit/AMD64/HalACPIFactoryInterface.cxx
@@ -7,6 +7,8 @@
#include <Builtins/ACPI/ACPIFactoryInterface.hxx>
#include <HALKit/AMD64/Processor.hpp>
#include <NewKit/String.hpp>
+#include <ArchKit/ArchKit.hpp>
+#include <KernelKit/KernelHeap.hpp>
namespace NewOS
{
@@ -61,44 +63,53 @@ namespace NewOS
MUST_PASS(fRsdp);
if (!signature)
- return ErrorOr<voidPtr>{-2};
+ return ErrorOr<voidPtr>{-1};
if (*signature == 0)
- return ErrorOr<voidPtr>{-3};
+ return ErrorOr<voidPtr>{-1};
RSDP* rsdPtr = reinterpret_cast<RSDP*>(this->fRsdp);
if (rsdPtr->Revision <= 1)
- {
- return ErrorOr<voidPtr>{-4};
- }
+ return ErrorOr<voidPtr>{-1};
+
+ RSDT* xsdt = (RSDT*)(rsdPtr->RsdtAddress);
- SDT* xsdt = (SDT*)(rsdPtr->XsdtAddress >> (rsdPtr->XsdtAddress & 0xFFF));
+ Int64 num = (xsdt->Length - sizeof(SDT)) / sizeof(UInt32);
- SizeT num = -(xsdt->Length - sizeof(SDT)) / 8;
+ if (num < 1)
+ {
+ /// stop here, we should have entries...
+ ke_stop(RUNTIME_CHECK_ACPI);
+ return ErrorOr<voidPtr>{-1};
+ }
this->fEntries = num;
- kcout << "ACPI: Number of entries: " << number(num) << endl;
+ kcout << "ACPI: Number of entries: " << number(this->fEntries) << endl;
+ kcout << "ACPI: Revision: " << number(xsdt->Revision) << endl;
+ kcout << "ACPI: Signature: " << xsdt->Signature << endl;
kcout << "ACPI: Address of XSDT: " << hex_number((UIntPtr)xsdt) << endl;
- constexpr short ACPI_SIGNATURE_LENGTH = 4;
+ const short cAcpiSignatureLength = 4;
for (Size index = 0; index < this->fEntries; ++index)
{
- SDT& sdt = xsdt[index];
+ SDT& sdt = *(SDT*)xsdt->AddressArr[index];
+
+ kcout << "ACPI: Revision: " << number(sdt.CreatorID) << endl;
- for (short signature_index = 0; signature_index < ACPI_SIGNATURE_LENGTH; ++signature_index)
+ for (short signature_index = 0; signature_index < cAcpiSignatureLength; ++signature_index)
{
if (sdt.Signature[signature_index] != signature[signature_index])
break;
- if (signature_index == 4)
+ if (signature_index == (cAcpiSignatureLength - 1))
return ErrorOr<voidPtr>(reinterpret_cast<voidPtr>(&sdt));
}
}
- return ErrorOr<voidPtr>{nullptr};
+ return ErrorOr<voidPtr>{-1};
}
/***
diff --git a/Kernel/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cpp b/Kernel/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cpp
index 9477ecb7..6d831d3b 100644
--- a/Kernel/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cpp
+++ b/Kernel/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cpp
@@ -5,23 +5,23 @@
------------------------------------------- */
#include <ArchKit/ArchKit.hpp>
-#include <KernelKit/ProcessScheduler.hpp>
+#include <KernelKit/ProcessScheduler.hxx>
#include <NewKit/String.hpp>
/// @brief Handle GPF fault.
/// @param rsp
EXTERN_C void idt_handle_gpf(NewOS::UIntPtr rsp)
{
- MUST_PASS(NewOS::ProcessScheduler::Shared().Leak().GetCurrent());
+ MUST_PASS(NewOS::ProcessScheduler::The().Leak().GetCurrent());
- NewOS::kcout << "New OS: Stack Pointer: "
+ NewOS::kcout << "newoskrnl: Stack Pointer: "
<< NewOS::StringBuilder::FromInt("rsp{%}", rsp);
NewOS::kcout
- << "New OS: General Protection Fault, caused by "
- << NewOS::ProcessScheduler::Shared().Leak().GetCurrent().Leak().GetName();
+ << "newoskrnl: General Protection Fault, caused by "
+ << NewOS::ProcessScheduler::The().Leak().GetCurrent().Leak().GetName();
- NewOS::ProcessScheduler::Shared().Leak().GetCurrent().Leak().Crash();
+ NewOS::ProcessScheduler::The().Leak().GetCurrent().Leak().Crash();
}
/// @brief Handle the scheduler interrupt, raised from the HPET timer.
@@ -31,14 +31,14 @@ EXTERN_C void idt_handle_scheduler(NewOS::UIntPtr rsp)
NewOS::kcout << NewOS::StringBuilder::FromInt("rsp{%}", rsp);
NewOS::kcout
- << "New OS: Will be scheduled back later "
- << NewOS::ProcessScheduler::Shared().Leak().GetCurrent().Leak().GetName()
+ << "newoskrnl: Will be scheduled back later "
+ << NewOS::ProcessScheduler::The().Leak().GetCurrent().Leak().GetName()
<< NewOS::end_line();
/// schedule another process.
if (!NewOS::ProcessHelper::StartScheduling())
{
- NewOS::kcout << "New OS: Continue schedule this process...\r";
+ NewOS::kcout << "newoskrnl: Continue schedule this process...\r";
}
}
@@ -46,56 +46,56 @@ EXTERN_C void idt_handle_scheduler(NewOS::UIntPtr rsp)
/// @param rsp
EXTERN_C void idt_handle_pf(NewOS::UIntPtr rsp)
{
- MUST_PASS(NewOS::ProcessScheduler::Shared().Leak().GetCurrent());
+ MUST_PASS(NewOS::ProcessScheduler::The().Leak().GetCurrent());
NewOS::kcout << NewOS::StringBuilder::FromInt("rsp{%}", rsp);
NewOS::kcout
- << "New OS: Segmentation Fault, caused by "
- << NewOS::ProcessScheduler::Shared().Leak().GetCurrent().Leak().GetName();
+ << "newoskrnl: Segmentation Fault, caused by "
+ << NewOS::ProcessScheduler::The().Leak().GetCurrent().Leak().GetName();
- NewOS::ProcessScheduler::Shared().Leak().GetCurrent().Leak().Crash();
+ NewOS::ProcessScheduler::The().Leak().GetCurrent().Leak().Crash();
}
/// @brief Handle math fault.
/// @param rsp
EXTERN_C void idt_handle_math(NewOS::UIntPtr rsp)
{
- MUST_PASS(NewOS::ProcessScheduler::Shared().Leak().GetCurrent());
+ MUST_PASS(NewOS::ProcessScheduler::The().Leak().GetCurrent());
NewOS::kcout << NewOS::StringBuilder::FromInt("rsp{%}", rsp);
NewOS::kcout
- << "New OS: Math error, caused by "
- << NewOS::ProcessScheduler::Shared().Leak().GetCurrent().Leak().GetName();
+ << "newoskrnl: Math error, caused by "
+ << NewOS::ProcessScheduler::The().Leak().GetCurrent().Leak().GetName();
- NewOS::ProcessScheduler::Shared().Leak().GetCurrent().Leak().Crash();
+ NewOS::ProcessScheduler::The().Leak().GetCurrent().Leak().Crash();
}
/// @brief Handle any generic fault.
/// @param rsp
EXTERN_C void idt_handle_generic(NewOS::UIntPtr rsp)
{
- MUST_PASS(NewOS::ProcessScheduler::Shared().Leak().GetCurrent());
+ MUST_PASS(NewOS::ProcessScheduler::The().Leak().GetCurrent());
NewOS::kcout << NewOS::StringBuilder::FromInt("sp{%}", rsp);
NewOS::kcout
- << "New OS: Execution error, caused by "
- << NewOS::ProcessScheduler::Shared().Leak().GetCurrent().Leak().GetName();
+ << "newoskrnl: Execution error, caused by "
+ << NewOS::ProcessScheduler::The().Leak().GetCurrent().Leak().GetName();
- NewOS::ProcessScheduler::Shared().Leak().GetCurrent().Leak().Crash();
+ NewOS::ProcessScheduler::The().Leak().GetCurrent().Leak().Crash();
}
/// @brief Handle #UD fault.
/// @param rsp
EXTERN_C void idt_handle_ud(NewOS::UIntPtr rsp)
{
- MUST_PASS(NewOS::ProcessScheduler::Shared().Leak().GetCurrent());
+ MUST_PASS(NewOS::ProcessScheduler::The().Leak().GetCurrent());
- NewOS::kcout << "New OS: Stack Pointer: "
+ NewOS::kcout << "newoskrnl: Stack Pointer: "
<< NewOS::StringBuilder::FromInt("rsp{%}", rsp);
NewOS::kcout
- << "New OS: Invalid interrupt, caused by "
- << NewOS::ProcessScheduler::Shared().Leak().GetCurrent().Leak().GetName();
+ << "newoskrnl: Invalid interrupt, caused by "
+ << NewOS::ProcessScheduler::The().Leak().GetCurrent().Leak().GetName();
- NewOS::ProcessScheduler::Shared().Leak().GetCurrent().Leak().Crash();
+ NewOS::ProcessScheduler::The().Leak().GetCurrent().Leak().Crash();
}
diff --git a/Kernel/HALKit/AMD64/HalCoreMultiProcessingAMD64.cpp b/Kernel/HALKit/AMD64/HalCoreMultiProcessingAMD64.cpp
index abd19586..a184efc2 100644
--- a/Kernel/HALKit/AMD64/HalCoreMultiProcessingAMD64.cpp
+++ b/Kernel/HALKit/AMD64/HalCoreMultiProcessingAMD64.cpp
@@ -7,6 +7,12 @@
#include <Builtins/ACPI/ACPIFactoryInterface.hxx>
#include <HALKit/AMD64/Processor.hpp>
#include <NewKit/KernelCheck.hpp>
+#include <ArchKit/ArchKit.hpp>
+
+#define kAPIC_ICR_Low 0x300
+#define kAPIC_ICR_High 0x310
+#define kAPIC_SIPI_Vector 0x00500
+#define kAPIC_EIPI_Vector 0x00400
///////////////////////////////////////////////////////////////////////////////////////
@@ -62,7 +68,7 @@ namespace NewOS::HAL
struct MadtProcessorLocalApic final
{
Char AcpiProcessorId;
- Char Reserved;
+ Char ApicId;
UInt32 Flags;
};
@@ -102,19 +108,51 @@ namespace NewOS::HAL
///////////////////////////////////////////////////////////////////////////////////////
- void hal_system_get_cores(voidPtr rsdPtr)
+ /// @brief Send start IPI for CPU.
+ /// @param apicId
+ /// @param vector
+ /// @param targetAddress
+ /// @return
+ Void hal_send_start_ipi(UInt32 apicId, UInt8 vector, UInt32 targetAddress)
+ {
+ NewOS::ke_dma_write(targetAddress, kAPIC_ICR_High, apicId << 24);
+ NewOS::ke_dma_write(targetAddress, kAPIC_ICR_Low, kAPIC_SIPI_Vector | vector);
+ }
+
+ /// @brief Send end IPI for CPU.
+ /// @param apicId
+ /// @param vector
+ /// @param targetAddress
+ /// @return
+ Void hal_send_end_ipi(UInt32 apicId, UInt8 vector, UInt32 targetAddress)
+ {
+ NewOS::ke_dma_write(targetAddress, kAPIC_ICR_High, apicId << 24);
+ NewOS::ke_dma_write(targetAddress, kAPIC_ICR_Low, kAPIC_EIPI_Vector | vector);
+ }
+
+ Void hal_system_get_cores(voidPtr rsdPtr)
{
auto acpi = ACPIFactoryInterface(rsdPtr);
kApicMadt = acpi.Find(kApicSignature).Leak().Leak();
- if (kApicMadt)
+ if (kApicMadt != nullptr)
{
- kcout << "New OS: APIC is present...\r";
- kApicInfoBlock = (MadtType*)kApicMadt;
+ MadtType* madt = (MadtType*)kApicMadt;
+
+ constexpr auto cMaxProbableCores = 4;
+
+ for (SizeT i = 0; i < cMaxProbableCores; ++i)
+ {
+ if (madt->MadtRecords[i].Flags == 0x01) // if local apic.
+ {
+ // then register as a core for scheduler.
+ kcout << "newoskrnl: register core as scheduler thread.\r";
+ }
+ }
}
else
{
- kcout << "New OS: APIC is not present! it is a vital component.\r";
+ kcout << "newoskrnl: APIC is not present! it is a vital component.\r";
ke_stop(RUNTIME_CHECK_FAILED);
}
}
diff --git a/Kernel/HALKit/AMD64/HalDebugOutput.cxx b/Kernel/HALKit/AMD64/HalDebugOutput.cxx
index 3cec26df..22d5c072 100644
--- a/Kernel/HALKit/AMD64/HalDebugOutput.cxx
+++ b/Kernel/HALKit/AMD64/HalDebugOutput.cxx
@@ -132,7 +132,7 @@ namespace NewOS
#endif // __DEBUG__
}
- TerminalDevice& TerminalDevice::Shared() noexcept
+ TerminalDevice& TerminalDevice::The() noexcept
{
static TerminalDevice* out = nullptr;
diff --git a/Kernel/HALKit/AMD64/HalKernelMain.cxx b/Kernel/HALKit/AMD64/HalKernelMain.cxx
index 07656060..3136bf76 100644
--- a/Kernel/HALKit/AMD64/HalKernelMain.cxx
+++ b/Kernel/HALKit/AMD64/HalKernelMain.cxx
@@ -11,7 +11,7 @@
#include <KernelKit/Framebuffer.hpp>
#include <KernelKit/KernelHeap.hpp>
#include <KernelKit/PEFCodeManager.hxx>
-#include <KernelKit/ProcessScheduler.hpp>
+#include <KernelKit/ProcessScheduler.hxx>
#include <KernelKit/UserHeap.hpp>
#include <NewKit/Json.hpp>
diff --git a/Kernel/HALKit/AMD64/HalSMPCore.cxx b/Kernel/HALKit/AMD64/HalSMPCore.cxx
index 90703e13..7aa13068 100644
--- a/Kernel/HALKit/AMD64/HalSMPCore.cxx
+++ b/Kernel/HALKit/AMD64/HalSMPCore.cxx
@@ -4,7 +4,7 @@
------------------------------------------- */
-#include <KernelKit/ProcessScheduler.hpp>
+#include <KernelKit/ProcessScheduler.hxx>
using namespace NewOS;
Void ProcessHeader::SetEntrypoint(UIntPtr& imageStart) noexcept
diff --git a/Kernel/HALKit/AMD64/Processor.hpp b/Kernel/HALKit/AMD64/Processor.hpp
index 235e425d..4916d845 100644
--- a/Kernel/HALKit/AMD64/Processor.hpp
+++ b/Kernel/HALKit/AMD64/Processor.hpp
@@ -17,6 +17,7 @@
#include <NewKit/Defines.hpp>
#include <NewKit/Utils.hpp>
#include <FirmwareKit/Handover.hxx>
+#include <HALKit/AMD64/HalPageAlloc.hpp>
#ifdef kCPUBackendName
#undef kCPUBackendName
@@ -53,6 +54,68 @@ namespace NewOS
namespace NewOS::HAL
{
+
+ enum
+ {
+ eFlagsUser,
+ eFlagsRw,
+ eFlagsExecDisable
+ };
+
+ /// @brief Map address to PDE.
+ /// @param pde a valid page directory.
+ /// @param phys_addr a valid phyiscal address.
+ /// @param virt_addr a valid virtual address.
+ /// @param flags the flags to put on the page.
+ inline Int32 ke_map_address(PDE* pde, UIntPtr phys_addr, UIntPtr virt_addr, UInt32 flags)
+ {
+ UInt16 pml4_index = (virt_addr >> 39) & 0x1FF;
+
+ if (!pde->Pte[pml4_index].Present)
+ {
+ pde->Pte[pml4_index].Present = true;
+ kcout << "PM is present now.\r";
+
+ pde->Pte[pml4_index].PhysicalAddress = phys_addr;
+ pde->Pte[pml4_index].Rw = flags & eFlagsRw;
+ pde->Pte[pml4_index].User = flags & eFlagsUser;
+ pde->Pte[pml4_index].ExecDisable = flags & eFlagsExecDisable;
+
+ return 0;
+ }
+ else
+ {
+ kcout << "PM is already present.\r";
+
+ kcout << "PhysicalAddress: " << hex_number(pde->Pte[pml4_index].PhysicalAddress) << endl;
+ kcout << "User: " << (pde->Pte[pml4_index].User ? "yes" : "no") << "\r";
+ kcout << "RW: " << (pde->Pte[pml4_index].Rw ? "yes" : "no") << "\r";
+
+ return 1;
+ }
+
+ return 0;
+ }
+
+ /// @brief Map address to PDE.
+ /// @param pde
+ /// @param phys_addr
+ /// @param virt_addr
+ /// @param flags
+ inline void ke_unmap_address(PDE* pde, UIntPtr phys_addr, UIntPtr virt_addr, UInt32 flags)
+ {
+ UInt16 pml4_index = (virt_addr >> 39) & 0x1FF;
+
+ if (pde->Pte[pml4_index].Present)
+ {
+ pde->Pte[pml4_index].Present = false;
+ pde->Pte[pml4_index].PhysicalAddress = 0;
+ pde->Pte[pml4_index].Rw = 0;
+ pde->Pte[pml4_index].User = 0;
+ pde->Pte[pml4_index].ExecDisable = 0;
+ }
+ }
+
EXTERN_C UChar In8(UInt16 port);
EXTERN_C UShort In16(UInt16 port);
EXTERN_C UInt In32(UInt16 port);
@@ -162,6 +225,8 @@ namespace NewOS::HAL
};
Void hal_system_get_cores(VoidPtr rsdPtr);
+ Void hal_send_start_ipi(UInt32 apicId, UInt8 vector, UInt32 targetAddress);
+ Void hal_send_end_ipi(UInt32 apicId, UInt8 vector, UInt32 targetAddress);
/// @brief Processor specific structures.
namespace Detail
diff --git a/Kernel/HALKit/AMD64/Storage/AHCI.cxx b/Kernel/HALKit/AMD64/Storage/AHCI.cxx
index 93cef10c..a8045617 100644
--- a/Kernel/HALKit/AMD64/Storage/AHCI.cxx
+++ b/Kernel/HALKit/AMD64/Storage/AHCI.cxx
@@ -43,7 +43,7 @@ NewOS::Boolean drv_std_init(NewOS::UInt16& PortsImplemented)
iterator[devIndex].Leak().EnableMmio(); /// enable the memory i/o for this ahci device.
kAhciDevice = iterator[devIndex].Leak(); /// and then leak the reference.
- kcout << "New Kernel: [PCI] Found AHCI controller.\r";
+ kcout << "newoskrnl: [PCI] Found AHCI controller.\r";
return true;
}
diff --git a/Kernel/KernelKit/DebugOutput.hpp b/Kernel/KernelKit/DebugOutput.hpp
index 594ca701..3acee338 100644
--- a/Kernel/KernelKit/DebugOutput.hpp
+++ b/Kernel/KernelKit/DebugOutput.hpp
@@ -73,26 +73,26 @@ namespace NewOS
NEWOS_COPY_DEFAULT(TerminalDevice);
- static TerminalDevice& Shared() noexcept;
+ static TerminalDevice& The() noexcept;
};
inline TerminalDevice& end_line()
{
- TerminalDevice& selfTerm = TerminalDevice::Shared();
+ TerminalDevice& selfTerm = TerminalDevice::The();
selfTerm << "\r";
return selfTerm;
}
inline TerminalDevice& carriage_return()
{
- TerminalDevice& selfTerm = TerminalDevice::Shared();
+ TerminalDevice& selfTerm = TerminalDevice::The();
selfTerm << "\r";
return selfTerm;
}
inline TerminalDevice& tabulate()
{
- TerminalDevice& selfTerm = TerminalDevice::Shared();
+ TerminalDevice& selfTerm = TerminalDevice::The();
selfTerm << "\t";
return selfTerm;
}
@@ -100,7 +100,7 @@ namespace NewOS
/// @brief emulate a terminal bell, like the VT100 does.
inline TerminalDevice& bell()
{
- TerminalDevice& selfTerm = TerminalDevice::Shared();
+ TerminalDevice& selfTerm = TerminalDevice::The();
selfTerm << "\a";
return selfTerm;
}
@@ -166,7 +166,7 @@ namespace NewOS
inline TerminalDevice& hex_number(const Long& x)
{
- TerminalDevice& selfTerm = TerminalDevice::Shared();
+ TerminalDevice& selfTerm = TerminalDevice::The();
selfTerm << "0x";
Detail::_write_number_hex(x, selfTerm);
@@ -176,7 +176,7 @@ namespace NewOS
inline TerminalDevice& number(const Long& x)
{
- TerminalDevice& selfTerm = TerminalDevice::Shared();
+ TerminalDevice& selfTerm = TerminalDevice::The();
Detail::_write_number(x, selfTerm);
@@ -185,7 +185,7 @@ namespace NewOS
inline TerminalDevice& get_console_in(Char* buf)
{
- TerminalDevice& selfTerm = TerminalDevice::Shared();
+ TerminalDevice& selfTerm = TerminalDevice::The();
selfTerm >> buf;
return selfTerm;
}
@@ -204,5 +204,5 @@ namespace NewOS
#undef kcout
#endif // ifdef kcout
-#define kcout TerminalDevice::Shared()
+#define kcout TerminalDevice::The()
#define endl end_line()
diff --git a/Kernel/KernelKit/DeviceManager.hpp b/Kernel/KernelKit/DeviceManager.hpp
index 6e2a803f..dc53fed5 100644
--- a/Kernel/KernelKit/DeviceManager.hpp
+++ b/Kernel/KernelKit/DeviceManager.hpp
@@ -21,8 +21,6 @@
#include <NewKit/ErrorOr.hpp>
#include <NewKit/Ref.hpp>
-#define kDriveManagerCount 4U
-
// Last Rev
// Wed, Apr 3, 2024 9:09:41 AM
@@ -70,7 +68,7 @@ namespace NewOS
}
bool operator!()
{
- return !fOut && !fIn;
+ return !fOut || !fIn;
}
private:
diff --git a/Kernel/KernelKit/DriveManager.hxx b/Kernel/KernelKit/DriveManager.hxx
index 7978221a..01058d00 100644
--- a/Kernel/KernelKit/DriveManager.hxx
+++ b/Kernel/KernelKit/DriveManager.hxx
@@ -14,8 +14,10 @@
#include <NewKit/Defines.hpp>
#include <NewKit/String.hpp>
-#define kDriveInvalidID -1
-#define kDriveNameLen 32
+#define kDriveManagerCount (4U)
+
+#define kDriveInvalidID (-1)
+#define kDriveNameLen (32)
namespace NewOS
{
@@ -111,7 +113,7 @@ namespace NewOS
return &mD;
default: {
DbgLastError() = kErrorNoSuchDisk;
- kcout << "New OS: No such disk.\n";
+ kcout << "newoskrnl: No such disk.\n";
break;
}
diff --git a/Kernel/KernelKit/Framebuffer.hpp b/Kernel/KernelKit/Framebuffer.hpp
index fd4eff04..1f189e77 100644
--- a/Kernel/KernelKit/Framebuffer.hpp
+++ b/Kernel/KernelKit/Framebuffer.hpp
@@ -39,6 +39,7 @@ namespace NewOS
: fFrameBufferAddr(addr)
{
}
+
~Framebuffer()
{
}
diff --git a/Kernel/KernelKit/KernelHeap.hpp b/Kernel/KernelKit/KernelHeap.hpp
index c7b898ed..e2ab19b5 100644
--- a/Kernel/KernelKit/KernelHeap.hpp
+++ b/Kernel/KernelKit/KernelHeap.hpp
@@ -36,4 +36,9 @@ namespace NewOS
/// @param heapPtr HIB pointer.
/// @return if it valid: point has crc now., otherwise fail.
Boolean ke_protect_ke_heap(VoidPtr heapPtr);
+
+ /// @brief Makes a kernel heap page.
+ /// @param heapPtr
+ /// @return
+ Int32 ke_make_ke_page(VoidPtr heapPtr);
} // namespace NewOS
diff --git a/Kernel/KernelKit/PEF.hpp b/Kernel/KernelKit/PEF.hpp
index 1874aa4e..98a413aa 100644
--- a/Kernel/KernelKit/PEF.hpp
+++ b/Kernel/KernelKit/PEF.hpp
@@ -44,7 +44,7 @@ namespace NewOS
{
kPefSubArchAMD,
kPefSubArchIntel,
- kPefSubArchARM,
+ kPefSubArchGeneric,
kPefSubArchIBM,
};
diff --git a/Kernel/KernelKit/ProcessScheduler.hpp b/Kernel/KernelKit/ProcessScheduler.hxx
index 8670691f..bd8cb628 100644
--- a/Kernel/KernelKit/ProcessScheduler.hpp
+++ b/Kernel/KernelKit/ProcessScheduler.hxx
@@ -14,7 +14,7 @@
#include <KernelKit/UserHeap.hpp>
#include <NewKit/MutableArray.hpp>
-#define kSchedMinMicroTime AffinityKind::kHartStandard
+#define kSchedMinMicroTime (AffinityKind::kHartStandard)
#define kSchedInvalidPID (-1)
#define kSchedProcessLimitPerTeam (100U)
@@ -163,9 +163,9 @@ namespace NewOS
enum
{
- kAppKind = 3,
- kLibKind = 3,
- kDriverKind = 0,
+ kAppKind = 1,
+ kShLibKind = 2,
+ kDriverKind = 3,
kKindCount,
};
@@ -270,7 +270,7 @@ namespace NewOS
SizeT Run() noexcept;
public:
- static Ref<ProcessScheduler&> Shared();
+ static Ref<ProcessScheduler&> The();
private:
ProcessTeam mTeam;
diff --git a/Kernel/KernelKit/SMPManager.hpp b/Kernel/KernelKit/SMPManager.hpp
index 12260a33..eb8c908a 100644
--- a/Kernel/KernelKit/SMPManager.hpp
+++ b/Kernel/KernelKit/SMPManager.hpp
@@ -105,7 +105,7 @@ namespace NewOS
public:
/// @brief Shared instance of the SMP Manager.
/// @return the reference to the smp manager.
- static Ref<SMPManager> Shared();
+ static Ref<SMPManager> The();
public:
/// @brief Returns the amount of threads present in the system.
diff --git a/Kernel/KernelKit/ThreadLocalStorage.inl b/Kernel/KernelKit/ThreadLocalStorage.inl
index 6407900f..a8269a14 100644
--- a/Kernel/KernelKit/ThreadLocalStorage.inl
+++ b/Kernel/KernelKit/ThreadLocalStorage.inl
@@ -7,7 +7,7 @@
//! @brief Allocates a pointer from the process's tls.
#ifndef __PROCESS_MANAGER__
-#include <KernelKit/ProcessScheduler.hpp>
+#include <KernelKit/ProcessScheduler.hxx>
#endif
template <typename T>
@@ -15,9 +15,9 @@ inline T* tls_new_ptr(void)
{
using namespace NewOS;
- MUST_PASS(ProcessScheduler::Shared().Leak().GetCurrent());
+ MUST_PASS(ProcessScheduler::The().Leak().GetCurrent());
- auto ref_process = ProcessScheduler::Shared().Leak().GetCurrent();
+ auto ref_process = ProcessScheduler::The().Leak().GetCurrent();
T* pointer = (T*)ref_process.Leak().New(sizeof(T));
return pointer;
@@ -32,9 +32,9 @@ inline bool tls_delete_ptr(T* ptr)
using namespace NewOS;
- MUST_PASS(ProcessScheduler::Shared().Leak().GetCurrent());
+ MUST_PASS(ProcessScheduler::The().Leak().GetCurrent());
- auto ref_process = ProcessScheduler::Shared().Leak().GetCurrent();
+ auto ref_process = ProcessScheduler::The().Leak().GetCurrent();
return ref_process.Leak().Delete(ptr, sizeof(T));
}
diff --git a/Kernel/KernelKit/XCOFF.hxx b/Kernel/KernelKit/XCOFF.hxx
index f2e49c4c..55e37bfd 100644
--- a/Kernel/KernelKit/XCOFF.hxx
+++ b/Kernel/KernelKit/XCOFF.hxx
@@ -16,12 +16,15 @@
#include <NewKit/Defines.hpp>
-#define kXCOFF64Magic (0x01F7)
+#define cXCOFF64Magic (0x01F7)
-#define kXCOFFRelFlg (0x0001)
-#define kXCOFFExecutable (0x0002)
-#define kXCOFFLnno (0x0004)
-#define kXCOFFLSyms (0x0008)
+#define cXCOFFRelFlg (0x0001)
+#define cXCOFFExecutable (0x0002)
+#define cXCOFFLnno (0x0004)
+#define cXCOFFLSyms (0x0008)
+
+struct XCoffFileHeader;
+struct XCoffForkHeader;
/// @brief XCoff file header, meant for POWER apps.
typedef struct XCoffFileHeader
@@ -33,6 +36,15 @@ typedef struct XCoffFileHeader
NewOS::UIntPtr fSymPtr;
NewOS::UInt32 fNumSyms;
NewOS::UInt16 fOptHdr; // ?: Number of bytes in optional header
-} XCoffFileHeader;
+} XCoffFileHeader32, XCoffFileHeader64;
+
+#define cForkNameLen (255)
+
+/// @brief This the executable manifest fork.
+typedef struct XCoffForkHeader {
+ NewOS::Char fPropertiesXMLFork[cForkNameLen];
+ NewOS::Char fDynamicLoaderFork[cForkNameLen];
+ NewOS::Char fCodeSignFork[cForkNameLen];
+} XCoffForkHeader;
#endif // ifndef __XCOFF__
diff --git a/Kernel/KernelRsrc.rsrc b/Kernel/KernelRsrc.rsrc
index 6689d10c..56c94a06 100644
--- a/Kernel/KernelRsrc.rsrc
+++ b/Kernel/KernelRsrc.rsrc
@@ -11,12 +11,12 @@ BEGIN
BLOCK "080904E4"
BEGIN
VALUE "CompanyName", "SoftwareLabs"
- VALUE "FileDescription", "New OS multiplatform kernel."
+ VALUE "FileDescription", "NuX/OS kernel."
VALUE "FileVersion", KERNEL_VERSION
- VALUE "InternalName", "NewKernel"
+ VALUE "InternalName", "NeXUS"
VALUE "LegalCopyright", "SoftwareLabs"
- VALUE "OriginalFilename", "NewOSKrnl.exe"
- VALUE "ProductName", "NewKernel"
+ VALUE "OriginalFilename", "newoskrnl.exe"
+ VALUE "ProductName", "NewOSKrnl"
VALUE "ProductVersion", KERNEL_VERSION
END
END
diff --git a/Kernel/Linker/16x0.json b/Kernel/Linker/16x0.json
index 40cee7c9..77235537 100644
--- a/Kernel/Linker/16x0.json
+++ b/Kernel/Linker/16x0.json
@@ -1,6 +1,6 @@
{
"executable_type": "kernel",
- "output_name": "NewOSKrnl.exe",
+ "output_name": "newoskrnl.exe",
"start_proc": "__ImageStart",
"format": "PEF"
}
diff --git a/Kernel/Linker/32x0.json b/Kernel/Linker/32x0.json
index 40cee7c9..77235537 100644
--- a/Kernel/Linker/32x0.json
+++ b/Kernel/Linker/32x0.json
@@ -1,6 +1,6 @@
{
"executable_type": "kernel",
- "output_name": "NewOSKrnl.exe",
+ "output_name": "newoskrnl.exe",
"start_proc": "__ImageStart",
"format": "PEF"
}
diff --git a/Kernel/Linker/64x0.json b/Kernel/Linker/64x0.json
index 40cee7c9..77235537 100644
--- a/Kernel/Linker/64x0.json
+++ b/Kernel/Linker/64x0.json
@@ -1,6 +1,6 @@
{
"executable_type": "kernel",
- "output_name": "NewOSKrnl.exe",
+ "output_name": "newoskrnl.exe",
"start_proc": "__ImageStart",
"format": "PEF"
}
diff --git a/Kernel/NetworkKit/NetworkDevice.inl b/Kernel/NetworkKit/NetworkDevice.inl
index 614ccadf..750520ff 100644
--- a/Kernel/NetworkKit/NetworkDevice.inl
+++ b/Kernel/NetworkKit/NetworkDevice.inl
@@ -15,7 +15,7 @@ namespace NewOS
void (*on_cleanup)(void))
: DeviceInterface<NetworkDeviceCommand>(out, in), fCleanup(on_cleanup)
{
- kcout << "New OS: NetworkDevice initialized.\r";
+ kcout << "newoskrnl: NetworkDevice initialized.\r";
MUST_PASS(out && in && on_cleanup);
}
@@ -24,7 +24,7 @@ namespace NewOS
{
MUST_PASS(fCleanup);
- kcout << "New OS: NetworkDevice cleanup.\r";
+ kcout << "newoskrnl: NetworkDevice cleanup.\r";
if (fCleanup)
fCleanup();
}
diff --git a/Kernel/Sources/AppMain.cxx b/Kernel/Sources/AppMain.cxx
index 9ca224c3..62795893 100644
--- a/Kernel/Sources/AppMain.cxx
+++ b/Kernel/Sources/AppMain.cxx
@@ -16,7 +16,7 @@
#include <KernelKit/KernelHeap.hpp>
#include <KernelKit/PEF.hpp>
#include <KernelKit/PEFCodeManager.hxx>
-#include <KernelKit/ProcessScheduler.hpp>
+#include <KernelKit/ProcessScheduler.hxx>
#include <KernelKit/UserHeap.hpp>
#include <NewKit/Json.hpp>
#include <NewKit/KernelCheck.hpp>
@@ -182,31 +182,31 @@ namespace NewOS::Detail
/// @brief System loader entrypoint.
/// @param void no parameters.
/// @return void no return value.
- STATIC NewOS::Void AppSystemLoader(NewOS::Void)
+ STATIC NewOS::Void AppSystem(NewOS::Void)
{
- NewOS::PEFLoader coreGraphicsShLib("/System/WindowServer");
+ NewOS::PEFLoader wndServer("/System/WindowServer");
- if (!coreGraphicsShLib.IsLoaded())
+ if (!wndServer.IsLoaded())
{
NewOS::ke_stop(RUNTIME_CHECK_FAILED);
}
- NewOS::Utils::execute_from_image(coreGraphicsShLib,
- NewOS::ProcessHeader::kLibKind);
+ NewOS::Utils::execute_from_image(wndServer,
+ NewOS::ProcessHeader::kAppKind);
- NewOS::PEFLoader logonService("/System/Login");
+ NewOS::PEFLoader launchServer("/System/Launcher");
- if (!logonService.IsLoaded())
+ if (!launchServer.IsLoaded())
{
NewOS::ke_stop(RUNTIME_CHECK_FAILED);
}
- NewOS::Utils::execute_from_image(logonService,
+ NewOS::Utils::execute_from_image(launchServer,
NewOS::ProcessHeader::kAppKind);
- NewOS::kcout << "SystemLoader: Exiting process, we're done initializing stuff...";
+ NewOS::kcout << "System: done, sleeping...";
- NewOS::ProcessScheduler::Shared().Leak().GetCurrent().Leak().Exit(0);
+ while (true) {}
}
} // namespace NewOS::Detail
@@ -218,8 +218,8 @@ EXTERN_C NewOS::Void AppMain(NewOS::Void)
/// Now run kernel loop, until no process are running.
NewOS::Detail::FilesystemWizard wizard; // automatic.
- auto cLoaderName = "SystemLoader";
- NewOS::execute_from_image(NewOS::Detail::AppSystemLoader, cLoaderName);
+ auto cLoaderName = "System";
+ NewOS::execute_from_image(NewOS::Detail::AppSystem, cLoaderName);
- while (NewOS::ProcessScheduler::Shared().Leak().Run() > 0) {}
+ while (NewOS::ProcessScheduler::The().Leak().Run() > 0) {}
}
diff --git a/Kernel/Sources/CodeManager.cxx b/Kernel/Sources/CodeManager.cxx
index 358481f6..10de3512 100644
--- a/Kernel/Sources/CodeManager.cxx
+++ b/Kernel/Sources/CodeManager.cxx
@@ -6,7 +6,7 @@
#include <NewKit/Utils.hpp>
#include <KernelKit/CodeManager.hpp>
-#include <KernelKit/ProcessScheduler.hpp>
+#include <KernelKit/ProcessScheduler.hxx>
namespace NewOS
{
@@ -25,6 +25,6 @@ namespace NewOS
Ref<ProcessHeader> refProc = proc;
- return ProcessScheduler::Shared().Leak().Add(refProc);
+ return ProcessScheduler::The().Leak().Add(refProc);
}
} // namespace NewOS \ No newline at end of file
diff --git a/Kernel/Sources/CxxAbi.cxx b/Kernel/Sources/CxxAbi.cxx
index 9aea8db7..0b01928a 100644
--- a/Kernel/Sources/CxxAbi.cxx
+++ b/Kernel/Sources/CxxAbi.cxx
@@ -14,7 +14,7 @@ uarch_t __atexit_func_count;
extern "C" void __cxa_pure_virtual()
{
- NewOS::kcout << "New OS: C++ placeholder method.\n";
+ NewOS::kcout << "newoskrnl: C++ placeholder method.\n";
}
extern "C" void ___chkstk_ms()
diff --git a/Kernel/Sources/FS/NewFS.cxx b/Kernel/Sources/FS/NewFS.cxx
index 6f19c8ed..a60fc228 100644
--- a/Kernel/Sources/FS/NewFS.cxx
+++ b/Kernel/Sources/FS/NewFS.cxx
@@ -46,7 +46,7 @@ _Output NewFork* NewFSParser::CreateFork(_Input NewCatalog* catalog,
Lba lba = (theFork.Kind == kNewFSDataForkKind) ? catalog->DataFork
: catalog->ResourceFork;
- kcout << "Fork Lba: " << hex_number(lba) << endl;
+ kcout << "newoskrnl: fork lba: " << hex_number(lba) << endl;
if (lba <= kNewFSCatalogStartAddress)
return nullptr;
@@ -73,11 +73,11 @@ _Output NewFork* NewFSParser::CreateFork(_Input NewCatalog* catalog,
drv->fInput(&drv->fPacket);
- kcout << "New OS: Next-Fork: " << hex_number(curFork.NextSibling) << endl;
+ kcout << "newoskrnl: Next-Fork: " << hex_number(curFork.NextSibling) << endl;
if (curFork.Flags == kNewFSFlagCreated)
{
- kcout << "New OS: Fork already exists.\r";
+ kcout << "newoskrnl: Fork already exists.\r";
/// sanity check.
if (StringBuilder::Equals(curFork.ForkName, theFork.ForkName) &&
@@ -126,10 +126,10 @@ _Output NewFork* NewFSParser::CreateFork(_Input NewCatalog* catalog,
drv->fOutput(&drv->fPacket);
/// log what we have now.
- kcout << "New OS: Wrote fork data at: " << hex_number(theFork.DataOffset)
+ kcout << "newoskrnl: Wrote fork data at: " << hex_number(theFork.DataOffset)
<< endl;
- kcout << "New OS: Wrote fork at: " << hex_number(lba) << endl;
+ kcout << "newoskrnl: Wrote fork at: " << hex_number(lba) << endl;
return &theFork;
}
@@ -372,9 +372,9 @@ _Output NewCatalog* NewFSParser::CreateCatalog(_Input const char* name,
drive->fOutput(&drive->fPacket);
- kcout << "New OS: Create new catalog, status: "
+ kcout << "newoskrnl: Create new catalog, status: "
<< hex_number(catalogChild->Flags) << endl;
- kcout << "New OS: Create new catalog, status: " << catalogChild->Name
+ kcout << "newoskrnl: Create new catalog, status: " << catalogChild->Name
<< endl;
drive->fPacket.fPacketContent = sectorBufPartBlock;
@@ -449,7 +449,7 @@ bool NewFSParser::Format(_Input _Output DriveTrait* drive)
partBlock->Version = kNewFSVersionInteger;
- const auto cUntitledHD = "New OS HD\0";
+ const auto cUntitledHD = "newoskrnl HD\0";
rt_copy_memory((VoidPtr)kNewFSIdent, (VoidPtr)partBlock->Ident,
kNewFSIdentLen);
@@ -475,14 +475,14 @@ bool NewFSParser::Format(_Input _Output DriveTrait* drive)
drive->fOutput(&drive->fPacket);
- kcout << "Drive-Kind: " << drive->fDriveKind() << endl;
+ kcout << "newoskrnl: drive kind: " << drive->fDriveKind() << endl;
- kcout << "Partition-Name: " << partBlock->PartitionName << endl;
- kcout << "Start-Catalog: " << hex_number(partBlock->StartCatalog) << endl;
- kcout << "Catalog-Count: " << hex_number(partBlock->CatalogCount) << endl;
- kcout << "Free-Catalog: " << hex_number(partBlock->FreeCatalog) << endl;
- kcout << "Free-Sectors: " << hex_number(partBlock->FreeSectors) << endl;
- kcout << "Sector-Size: " << hex_number(partBlock->SectorSize) << endl;
+ kcout << "newoskrnl: partition name: " << partBlock->PartitionName << endl;
+ kcout << "newoskrnl: start: " << hex_number(partBlock->StartCatalog) << endl;
+ kcout << "newoskrnl: number of catalogs: " << hex_number(partBlock->CatalogCount) << endl;
+ kcout << "newoskrnl: free catalog: " << hex_number(partBlock->FreeCatalog) << endl;
+ kcout << "newoskrnl: free sectors: " << hex_number(partBlock->FreeSectors) << endl;
+ kcout << "newoskrnl: sector size: " << hex_number(partBlock->SectorSize) << endl;
/// write the root catalog.
this->CreateCatalog(kNewFSRoot, 0, kNewFSCatalogKindDir);
@@ -490,7 +490,7 @@ bool NewFSParser::Format(_Input _Output DriveTrait* drive)
return true;
}
- kcout << "New OS: PartitionBlock already exists.\r";
+ kcout << "newoskrnl: PartitionBlock already exists.\r";
/// return success as well, do not ignore that partition.
return true;
@@ -531,14 +531,14 @@ bool NewFSParser::WriteCatalog(_Input _Output NewCatalog* catalog, voidPtr data,
drive->fInput(&drive->fPacket);
- kcout << "Fork-Name: " << forkData->ForkName << endl;
+ kcout << "newoskrnl: forkName: " << forkData->ForkName << endl;
/// sanity check the fork.
if (forkData->DataOffset <= kNewFSCatalogStartAddress)
{
DbgLastError() = kErrorDiskIsCorrupted;
- kcout << "New OS: Invalid fork offset.\r";
+ kcout << "newoskrnl: Invalid fork offset.\r";
delete forkData;
return false;
@@ -552,7 +552,8 @@ bool NewFSParser::WriteCatalog(_Input _Output NewCatalog* catalog, voidPtr data,
drive->fPacket.fPacketContent = data;
drive->fPacket.fPacketSize = sizeOfData;
drive->fPacket.fLba = forkData->DataOffset;
- kcout << "Fork-Offset: " << hex_number(forkData->DataOffset) << endl;
+
+ kcout << "newoskrnl: data offset: " << hex_number(forkData->DataOffset) << endl;
drive->fOutput(&drive->fPacket);
@@ -563,10 +564,12 @@ bool NewFSParser::WriteCatalog(_Input _Output NewCatalog* catalog, voidPtr data,
catalog == nullptr)
{
delete catalog;
+
drive->fPacket.fPacketContent = data;
drive->fPacket.fPacketSize = sizeOfData;
drive->fPacket.fLba = forkData->DataOffset;
- kcout << "Fork-Offset: " << hex_number(forkData->DataOffset) << endl;
+
+ kcout << "newoskrnl: data offset: " << hex_number(forkData->DataOffset) << endl;
drive->fOutput(&drive->fPacket);
@@ -670,7 +673,7 @@ _NewFSSearchThroughCatalogList:
NewCatalog* catalogPtr = new NewCatalog();
rt_copy_memory(catalog, catalogPtr, sizeof(NewCatalog));
- kcout << "New OS: Found catalog at: " << hex_number(startCatalogList) << endl;
+ kcout << "newoskrnl: found catalog at: " << hex_number(startCatalogList) << endl;
outLba = startCatalogList;
delete[] sectorBuf;
@@ -809,8 +812,8 @@ VoidPtr NewFSParser::ReadCatalog(_Input _Output NewCatalog* catalog,
Lba dataForkLba = catalog->DataFork;
Size dataForkSize = catalog->DataForkSize;
- kcout << "Found-Catalog: " << catalog->Name
- << ", Data-Fork: " << hex_number(dataForkLba) << endl;
+ kcout << "newoskrnl: catalog " << catalog->Name
+ << ", fork: " << hex_number(dataForkLba) << endl;
Char* sectorBuf = new Char[sizeof(NewFork)];
auto drive = sMountpointInterface.GetAddressOf(this->fDriveIndex);
@@ -830,7 +833,7 @@ VoidPtr NewFSParser::ReadCatalog(_Input _Output NewCatalog* catalog,
forkData = (NewFork*)sectorBuf;
- kcout << "Fork-Name: " << forkData->ForkName << endl;
+ kcout << "newoskrnl: name: " << forkData->ForkName << endl;
if (forkData->DataOffset <= kNewFSCatalogStartAddress)
{
@@ -930,11 +933,11 @@ namespace NewOS::Detail
if (!StringBuilder::Equals(partBlock->Ident, kNewFSIdent))
{
- kcout << "New OS: New FS Partition is corrupt.\r";
+ kcout << "newoskrnl: New FS Partition is corrupt.\r";
return false;
}
- kcout << "New OS: Read partition: " << partBlock->PartitionName << ", with success!\r";
+ kcout << "newoskrnl: Read partition: " << partBlock->PartitionName << ", with success!\r";
return true;
}
diff --git a/Kernel/Sources/IndexableProperty.cxx b/Kernel/Sources/IndexableProperty.cxx
index 16694f52..6c773b9a 100644
--- a/Kernel/Sources/IndexableProperty.cxx
+++ b/Kernel/Sources/IndexableProperty.cxx
@@ -50,7 +50,7 @@ namespace NewOS
indexer.AddFlag(kIndexerClaimed);
rt_copy_memory((VoidPtr)indexer.LeakProperty().Path, (VoidPtr)filename, filenameLen);
- kcout << "New OS: FSKit: index new file: " << filename << endl;
+ kcout << "newoskrnl: FSKit: index new file: " << filename << endl;
}
}
} // namespace Indexer
diff --git a/Kernel/Sources/KernelCheck.cxx b/Kernel/Sources/KernelCheck.cxx
index b59417d4..6b355011 100644
--- a/Kernel/Sources/KernelCheck.cxx
+++ b/Kernel/Sources/KernelCheck.cxx
@@ -98,8 +98,8 @@ namespace NewOS
if (!expr)
{
#ifdef __DEBUG__
- kcout << "New Kernel: File: " << file << "\r";
- kcout << "New Kernel: Line: " << line << "\r";
+ kcout << "newoskrnl: File: " << file << "\r";
+ kcout << "newoskrnl: Line: " << line << "\r";
#endif // __DEBUG__
diff --git a/Kernel/Sources/KernelHeap.cxx b/Kernel/Sources/KernelHeap.cxx
index a8ca467e..93f0c164 100644
--- a/Kernel/Sources/KernelHeap.cxx
+++ b/Kernel/Sources/KernelHeap.cxx
@@ -38,7 +38,10 @@ namespace NewOS
SizeT fTargetPtrSize;
/// @brief 64-bit target pointer.
UIntPtr fTargetPtr;
- UInt8 fPadding[kKernelHeapHeaderPaddingSz];
+ /// @brief Is this a page pointer?
+ Boolean fPagePtr;
+ /// @brief Padding bytes for header.
+ UInt8 fPadding[kKernelHeapHeaderPaddingSz];
};
typedef HeapInformationBlock* HeapInformationBlockPtr;
@@ -64,6 +67,7 @@ namespace NewOS
heapInfo->fMagic = kKernelHeapMagic;
heapInfo->fCRC32 = 0; // dont fill it for now.
heapInfo->fTargetPtr = wrapper.VirtualAddress();
+ heapInfo->fPagePtr = 0;
++kHeapCount;
@@ -71,6 +75,27 @@ namespace NewOS
sizeof(Detail::HeapInformationBlock));
}
+ /// @brief Makes a page heap.
+ /// @param heapPtr
+ /// @return
+ Int32 ke_make_ke_page(VoidPtr heapPtr)
+ {
+ if (kHeapCount < 1)
+ return -kErrorInternal;
+ if (((IntPtr)heapPtr - sizeof(Detail::HeapInformationBlock)) <= 0)
+ return -kErrorInternal;
+ if (((IntPtr)heapPtr - kBadPtr) < 0)
+ return -kErrorInternal;
+
+ Detail::HeapInformationBlockPtr virtualAddress =
+ reinterpret_cast<Detail::HeapInformationBlockPtr>(
+ (UIntPtr)heapPtr - sizeof(Detail::HeapInformationBlock));
+
+ virtualAddress->fPagePtr = 1;
+
+ return 0;
+ }
+
/// @brief Declare pointer as free.
/// @param heapPtr the pointer.
/// @return
diff --git a/Kernel/Sources/PEFCodeManager.cxx b/Kernel/Sources/PEFCodeManager.cxx
index 6fa7e6a1..a84730e9 100644
--- a/Kernel/Sources/PEFCodeManager.cxx
+++ b/Kernel/Sources/PEFCodeManager.cxx
@@ -8,7 +8,7 @@
#include <KernelKit/FileManager.hpp>
#include <KernelKit/KernelHeap.hpp>
#include <KernelKit/PEFCodeManager.hxx>
-#include <KernelKit/ProcessScheduler.hpp>
+#include <KernelKit/ProcessScheduler.hxx>
#include <NewKit/Defines.hpp>
#include <NewKit/KernelCheck.hpp>
#include <NewKit/OwnPtr.hpp>
@@ -195,7 +195,7 @@ namespace NewOS
proc.Kind = procKind;
- return ProcessScheduler::Shared().Leak().Add(refProc);
+ return ProcessScheduler::The().Leak().Add(refProc);
}
} // namespace Utils
diff --git a/Kernel/Sources/PEFSharedObjectRT.cxx b/Kernel/Sources/PEFSharedObject.cxx
index 20af1b98..06825a3c 100644
--- a/Kernel/Sources/PEFSharedObjectRT.cxx
+++ b/Kernel/Sources/PEFSharedObject.cxx
@@ -10,7 +10,7 @@
#include <KernelKit/DebugOutput.hpp>
#include <KernelKit/PEF.hpp>
#include <KernelKit/PEFSharedObject.hxx>
-#include <KernelKit/ProcessScheduler.hpp>
+#include <KernelKit/ProcessScheduler.hxx>
#include <KernelKit/ThreadLocalStorage.hxx>
#include <NewKit/Defines.hpp>
@@ -41,7 +41,7 @@ EXTERN_C SharedObjectPtr rt_library_init(void)
if (!library)
{
- ProcessScheduler::Shared().Leak().GetCurrent().Leak().Crash();
+ ProcessScheduler::The().Leak().GetCurrent().Leak().Crash();
return nullptr;
}
@@ -50,17 +50,17 @@ EXTERN_C SharedObjectPtr rt_library_init(void)
if (!library->Get())
{
- ProcessScheduler::Shared().Leak().GetCurrent().Leak().Crash();
+ ProcessScheduler::The().Leak().GetCurrent().Leak().Crash();
return nullptr;
}
library->Get()->fImageObject =
- ProcessScheduler::Shared().Leak().GetCurrent().Leak().Image;
+ ProcessScheduler::The().Leak().GetCurrent().Leak().Image;
if (!library->Get()->fImageObject)
{
- ProcessScheduler::Shared().Leak().GetCurrent().Leak().Crash();
+ ProcessScheduler::The().Leak().GetCurrent().Leak().Crash();
return nullptr;
}
@@ -85,7 +85,7 @@ EXTERN_C Void rt_library_free(SharedObjectPtr lib, bool* successful)
if (lib == nullptr)
{
*successful = false;
- ProcessScheduler::Shared().Leak().GetCurrent().Leak().Crash();
+ ProcessScheduler::The().Leak().GetCurrent().Leak().Crash();
}
delete lib->Get();
@@ -102,6 +102,5 @@ EXTERN_C Void rt_library_free(SharedObjectPtr lib, bool* successful)
/// @param
EXTERN_C void __mh_purecall(void)
{
- ProcessScheduler::Shared().Leak().GetCurrent().Leak().Crash();
- return;
+ kcout << "newoskrnl: unimplemented symbol!\r";
}
diff --git a/Kernel/Sources/ProcessScheduler.cxx b/Kernel/Sources/ProcessScheduler.cxx
index 1e4537f1..bf088cc6 100644
--- a/Kernel/Sources/ProcessScheduler.cxx
+++ b/Kernel/Sources/ProcessScheduler.cxx
@@ -9,7 +9,7 @@
/// @brief MicroKernel process scheduler.
/***********************************************************************************/
-#include <KernelKit/ProcessScheduler.hpp>
+#include <KernelKit/ProcessScheduler.hxx>
#include <KernelKit/SMPManager.hpp>
#include <KernelKit/KernelHeap.hpp>
#include <NewKit/String.hpp>
@@ -42,7 +42,7 @@ namespace NewOS
void ProcessHeader::Crash()
{
- kcout << this->Name << ": crashed. (id = " << number(39);
+ kcout << this->Name << ": crashed. (id = " << number(kErrorProcessFault);
kcout << ")\r";
if (this->Ring != kRingUserKind)
@@ -163,11 +163,11 @@ namespace NewOS
void ProcessHeader::Exit(Int32 exit_code)
{
if (this->ProcessId !=
- ProcessScheduler::Shared().Leak().GetCurrent().Leak().ProcessId)
+ ProcessScheduler::The().Leak().GetCurrent().Leak().ProcessId)
ke_stop(RUNTIME_CHECK_PROCESS);
if (this->Ring == (Int32)ProcessSelector::kRingKernel &&
- ProcessScheduler::Shared().Leak().GetCurrent().Leak().Ring > 0)
+ ProcessScheduler::The().Leak().GetCurrent().Leak().Ring > 0)
ke_stop(RUNTIME_CHECK_PROCESS);
kLastExitCode = exit_code;
@@ -193,7 +193,7 @@ namespace NewOS
this->Image = nullptr;
this->StackFrame = nullptr;
- ProcessScheduler::Shared().Leak().Remove(this->ProcessId);
+ ProcessScheduler::The().Leak().Remove(this->ProcessId);
}
/// @brief Add process to list.
@@ -206,7 +206,7 @@ namespace NewOS
if (!process.Leak().Image)
{
- if (process.Leak().Kind != ProcessHeader::kLibKind)
+ if (process.Leak().Kind != ProcessHeader::kShLibKind)
{
return -kErrorNoEntrypoint;
}
@@ -223,7 +223,7 @@ namespace NewOS
/// Create heap according to type of process.
if (process.Leak().Kind == ProcessHeader::kAppKind)
process.Leak().HeapPtr = rt_new_heap(kUserHeapUser | kUserHeapRw);
- else if (process.Leak().Kind == ProcessHeader::kLibKind)
+ else if (process.Leak().Kind == ProcessHeader::kShLibKind)
process.Leak().HeapPtr = rt_new_heap(kUserHeapUser | kUserHeapRw | kUserHeapShared);
else
process.Leak().HeapPtr = rt_new_heap(kUserHeapDriver | kUserHeapRw);
@@ -301,7 +301,7 @@ namespace NewOS
/// @brief Shared instance of the process scheduler.
/// @return
- Ref<ProcessScheduler&> ProcessScheduler::Shared()
+ Ref<ProcessScheduler&> ProcessScheduler::The()
{
static ProcessScheduler ref;
return {ref};
@@ -319,7 +319,7 @@ namespace NewOS
PID& ProcessHelper::GetCurrentPID()
{
kcout << "ProcessHelper::GetCurrentPID: Leaking ProcessId...\r";
- return ProcessScheduler::Shared().Leak().GetCurrent().Leak().ProcessId;
+ return ProcessScheduler::The().Leak().GetCurrent().Leak().ProcessId;
}
/// @brief Check if process can be schedulded.
@@ -355,13 +355,13 @@ namespace NewOS
bool ProcessHelper::StartScheduling()
{
if (ProcessHelper::CanBeScheduled(
- ProcessScheduler::Shared().Leak().GetCurrent()))
+ ProcessScheduler::The().Leak().GetCurrent()))
{
- --ProcessScheduler::Shared().Leak().GetCurrent().Leak().PTime;
+ --ProcessScheduler::The().Leak().GetCurrent().Leak().PTime;
return false;
}
- auto processRef = ProcessScheduler::Shared().Leak();
+ auto processRef = ProcessScheduler::The().Leak();
if (!processRef)
return false; // we have nothing to schedule. simply return.
@@ -385,29 +385,29 @@ namespace NewOS
if (!the_stack || new_pid < 0)
return false;
- for (SizeT index = 0UL; index < SMPManager::Shared().Leak().Count(); ++index)
+ for (SizeT index = 0UL; index < SMPManager::The().Leak().Count(); ++index)
{
- if (SMPManager::Shared().Leak()[index].Leak().Kind() == kInvalidHart)
+ if (SMPManager::The().Leak()[index].Leak().Kind() == kInvalidHart)
continue;
- if (SMPManager::Shared().Leak()[index].Leak().StackFrame() == the_stack)
+ if (SMPManager::The().Leak()[index].Leak().StackFrame() == the_stack)
{
- SMPManager::Shared().Leak()[index].Leak().Busy(false);
+ SMPManager::The().Leak()[index].Leak().Busy(false);
continue;
}
- if (SMPManager::Shared().Leak()[index].Leak().IsBusy())
+ if (SMPManager::The().Leak()[index].Leak().IsBusy())
continue;
- if (SMPManager::Shared().Leak()[index].Leak().Kind() !=
+ if (SMPManager::The().Leak()[index].Leak().Kind() !=
ThreadKind::kHartBoot &&
- SMPManager::Shared().Leak()[index].Leak().Kind() !=
+ SMPManager::The().Leak()[index].Leak().Kind() !=
ThreadKind::kHartSystemReserved)
{
- SMPManager::Shared().Leak()[index].Leak().Busy(true);
+ SMPManager::The().Leak()[index].Leak().Busy(true);
ProcessHelper::GetCurrentPID() = new_pid;
- return SMPManager::Shared().Leak()[index].Leak().Switch(the_stack);
+ return SMPManager::The().Leak()[index].Leak().Switch(the_stack);
}
}
diff --git a/Kernel/Sources/ProcessTeam.cxx b/Kernel/Sources/ProcessTeam.cxx
index 7e311399..068e0dbb 100644
--- a/Kernel/Sources/ProcessTeam.cxx
+++ b/Kernel/Sources/ProcessTeam.cxx
@@ -9,7 +9,7 @@
/// @brief Process teams implementation.
/***********************************************************************************/
-#include <KernelKit/ProcessScheduler.hpp>
+#include <KernelKit/ProcessScheduler.hxx>
namespace NewOS
{
diff --git a/Kernel/Sources/SMPManager.cxx b/Kernel/Sources/SMPManager.cxx
index 90a9d440..29e0fa26 100644
--- a/Kernel/Sources/SMPManager.cxx
+++ b/Kernel/Sources/SMPManager.cxx
@@ -5,7 +5,7 @@
------------------------------------------- */
#include <ArchKit/ArchKit.hpp>
-#include <KernelKit/ProcessScheduler.hpp>
+#include <KernelKit/ProcessScheduler.hxx>
#include <KernelKit/SMPManager.hpp>
///! BUGS: 0
@@ -95,7 +95,6 @@ namespace NewOS
{
/// Keep the arguments, switch the base pointer, stack pointer
/// fs and gs registers.
-
fStack->Rbp = stack->Rbp;
fStack->Rsp = stack->Rsp;
fStack->Fs = stack->Fs;
@@ -103,6 +102,7 @@ namespace NewOS
}
rt_do_context_switch(fStack);
+
return true;
}
@@ -121,7 +121,7 @@ namespace NewOS
SMPManager::~SMPManager() = default;
/// @brief Shared singleton function
- Ref<SMPManager> SMPManager::Shared()
+ Ref<SMPManager> SMPManager::The()
{
static SMPManager manager;
return {manager};
@@ -172,6 +172,8 @@ namespace NewOS
rt_copy_memory(stack, fThreadList[idx].Leak().Leak().fStack,
sizeof(HAL::StackFrame));
+ fThreadList[idx].Leak().Leak().Switch(fThreadList[idx].Leak().Leak().fStack);
+
fThreadList[idx].Leak().Leak().fPID = ProcessHelper::GetCurrentPID();
fThreadList[idx].Leak().Leak().Busy(false);
diff --git a/Kernel/Sources/Semaphore.cxx b/Kernel/Sources/Semaphore.cxx
index 7bd1d513..e2e135d0 100644
--- a/Kernel/Sources/Semaphore.cxx
+++ b/Kernel/Sources/Semaphore.cxx
@@ -4,7 +4,7 @@
------------------------------------------- */
-#include <KernelKit/ProcessScheduler.hpp>
+#include <KernelKit/ProcessScheduler.hxx>
#include <KernelKit/Semaphore.hpp>
#include <KernelKit/Timer.hpp>
diff --git a/Kernel/Sources/ThreadLocalStorage.cxx b/Kernel/Sources/ThreadLocalStorage.cxx
index c31ae1c2..f72bab67 100644
--- a/Kernel/Sources/ThreadLocalStorage.cxx
+++ b/Kernel/Sources/ThreadLocalStorage.cxx
@@ -7,7 +7,7 @@
* ========================================================
*/
-#include <KernelKit/ProcessScheduler.hpp>
+#include <KernelKit/ProcessScheduler.hxx>
#include <KernelKit/ThreadLocalStorage.hxx>
///! BUGS: 0
@@ -33,7 +33,7 @@ Boolean tls_check_tib(ThreadInformationBlock* tib)
Encoder encoder;
const char* tibAsBytes = encoder.AsBytes(tib);
- kcout << "New OS: Checking for a valid cookie...\r";
+ kcout << "newoskrnl: Checking for a valid cookie...\r";
return tibAsBytes[0] == kCookieMag0 && tibAsBytes[1] == kCookieMag1 &&
tibAsBytes[2] == kCookieMag2;
@@ -50,9 +50,9 @@ EXTERN_C Void tls_check_syscall_impl(NewOS::HAL::StackFramePtr stackPtr) noexcep
if (!tls_check_tib(tib))
{
- kcout << "New OS: Verification failed, Crashing...\r";
- ProcessScheduler::Shared().Leak().GetCurrent().Leak().Crash();
+ kcout << "newoskrnl: Verification failed, Crashing...\r";
+ ProcessScheduler::The().Leak().GetCurrent().Leak().Crash();
}
- kcout << "New OS: Verification succeeded! Keeping on...\r";
+ kcout << "newoskrnl: Verification succeeded! Keeping on...\r";
}
diff --git a/Kernel/Sources/UserHeap.cxx b/Kernel/Sources/UserHeap.cxx
index 02c4c753..64b75641 100644
--- a/Kernel/Sources/UserHeap.cxx
+++ b/Kernel/Sources/UserHeap.cxx
@@ -4,7 +4,7 @@
------------------------------------------- */
-#include <KernelKit/ProcessScheduler.hpp>
+#include <KernelKit/ProcessScheduler.hxx>
#include <KernelKit/UserHeap.hpp>
#include <NewKit/PageManager.hpp>
@@ -37,8 +37,9 @@ namespace NewOS
*/
class UserHeapManager final
{
- public:
UserHeapManager() = delete;
+
+ public:
~UserHeapManager() = default;
public:
@@ -46,14 +47,17 @@ namespace NewOS
{
return s_NumPools;
}
+
STATIC Ref<Pmm>& Leak()
{
return s_Pmm;
}
+
STATIC Boolean& IsEnabled()
{
return s_PoolsAreEnabled;
}
+
STATIC MutableArray<Ref<PTEWrapper>>& The()
{
return s_Pool;
@@ -146,7 +150,7 @@ namespace NewOS
{
if (!poolHdr->fFree)
{
- ProcessScheduler::Shared().Leak().GetCurrent().Leak().Crash();
+ ProcessScheduler::The().Leak().GetCurrent().Leak().Crash();
return;
}
diff --git a/Kernel/makefile b/Kernel/makefile
index b7749100..c550956a 100644
--- a/Kernel/makefile
+++ b/Kernel/makefile
@@ -37,7 +37,7 @@ LDFLAGS = -e __ImageStart --subsystem=17
LDOBJ = Objects/*.obj
# This file is the kernel, responsible of task management and memory.
-KERNEL = NewOSKrnl.exe
+KERNEL = newoskrnl.exe
.PHONY: error
error:
@@ -69,7 +69,7 @@ link-amd64-epm:
.PHONY: all
all: newos-amd64-epm link-amd64-epm
- @echo "NewKernel => OK."
+ @echo "NewOSKrnl => OK."
.PHONY: help
help: