summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--.gitignore3
-rw-r--r--dev/boot/BootKit/Support.h4
-rw-r--r--dev/boot/amd64-ci.make6
-rw-r--r--dev/boot/amd64-desktop.make6
-rw-r--r--dev/boot/arm64-desktop.make6
-rw-r--r--dev/boot/src/BootloaderRsrc.rsrc2
-rw-r--r--dev/boot/src/HEL/AMD64/BootEFI.cc4
-rw-r--r--dev/boot/src/HEL/ARM64/BootEFI.cc2
-rw-r--r--dev/kernel/HALKit/AMD64/HalApplicationProcessor.cc1
-rw-r--r--dev/kernel/HALKit/AMD64/HalControlRegisterAPI.s (renamed from dev/kernel/HALKit/AMD64/HalControlRegister.s)0
-rw-r--r--dev/kernel/HALKit/AMD64/HalCoreInterruptHandler.cc (renamed from dev/kernel/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cc)4
-rw-r--r--dev/kernel/HALKit/AMD64/HalKernelMain.cc10
-rw-r--r--dev/kernel/HALKit/AMD64/HalPagingMgr.cc (renamed from dev/kernel/HALKit/AMD64/HalPagingMgrAMD64.cc)4
-rw-r--r--dev/kernel/HALKit/AMD64/HalProcessor.cc (renamed from dev/kernel/HALKit/AMD64/HalProcessorAMD64.cc)9
-rw-r--r--dev/kernel/HALKit/AMD64/HalSchedulerCorePrimitives.cc (renamed from dev/kernel/HALKit/AMD64/HalSchedulerCorePrimitivesAMD64.cc)0
-rw-r--r--dev/kernel/HALKit/AMD64/HalTimer.cc (renamed from dev/kernel/HALKit/AMD64/HalTimerAMD64.cc)0
-rw-r--r--dev/kernel/HALKit/AMD64/HalUtilsAPI.asm2
-rw-r--r--dev/kernel/HALKit/AMD64/Network/Generic+Basic+RTL8139.cc2
-rw-r--r--dev/kernel/HALKit/AMD64/Processor.h13
-rw-r--r--dev/kernel/HALKit/AMD64/Storage/AHCI+Generic.cc4
-rw-r--r--dev/kernel/HALKit/ARM64/HalPagingMgr.cc (renamed from dev/kernel/HALKit/ARM64/HalPagingMgrARM64.cc)0
-rw-r--r--dev/kernel/HALKit/ARM64/HalSchedulerCore.cc (renamed from dev/kernel/HALKit/ARM64/HalSchedulerCoreARM64.cc)0
-rw-r--r--dev/kernel/HALKit/ARM64/HalSchedulerCorePrimitives.cc (renamed from dev/kernel/HALKit/ARM64/HalSchedulerCorePrimitivesARM64.cc)0
-rw-r--r--dev/kernel/HALKit/ARM64/HalTimer.cc (renamed from dev/kernel/HALKit/ARM64/HalTimerARM64.cc)0
-rw-r--r--dev/kernel/HALKit/ARM64/Processor.h2
-rw-r--r--dev/kernel/KernelKit/KPC.h3
-rw-r--r--dev/kernel/KernelKit/LockDelegate.h4
-rw-r--r--dev/kernel/KernelKit/ZXD.h24
-rw-r--r--dev/kernel/amd64-ci.make2
-rw-r--r--dev/kernel/amd64-desktop.make2
-rw-r--r--dev/kernel/arm64-desktop.make2
-rw-r--r--dev/kernel/kernel_rsrc.rsrc2
-rw-r--r--dev/kernel/src/BitMapMgr.cc18
-rw-r--r--dev/kernel/src/FS/HeFS+FileSystemParser.cc5
-rw-r--r--dev/kernel/src/HeapMgr.cc16
-rw-r--r--dev/kernel/src/PEFCodeMgr.cc2
-rw-r--r--dev/kernel/src/UserProcessScheduler.cc4
-rw-r--r--docs/drawio/OS_DESIGN.drawio30
-rw-r--r--public/tools/manual/src/CommandLine.cc4
-rw-r--r--public/tools/ping/src/CommandLine.cc8
40 files changed, 116 insertions, 94 deletions
diff --git a/.gitignore b/.gitignore
index 01c18138..9722f662 100644
--- a/.gitignore
+++ b/.gitignore
@@ -20,6 +20,9 @@ public/frameworks/*/dist/*
*.pdf
*.aux
+ne_kernel
+ne_bootz
+
neoskrnl/neoskrnl.xcodeproj/project.xcworkspace/xcshareddata/
tooling/dist/mkfs.*
diff --git a/dev/boot/BootKit/Support.h b/dev/boot/BootKit/Support.h
index 6e1407c2..b4129abc 100644
--- a/dev/boot/BootKit/Support.h
+++ b/dev/boot/BootKit/Support.h
@@ -9,7 +9,7 @@
/// @file Support.h
/// @brief Purpose of this file is to help port libs into the bootloader.
-#ifndef __aarch64__
+#ifndef __NE_ARM64__
#include <string.h>
#endif
@@ -38,7 +38,9 @@ EXTERN_C int strcmp(const char* whatToCheck, const char* whatToCheckRight);
#else
+#ifndef __NE_ARM64__
#include <string.h>
+#endif
#endif // __BOOTZ__
diff --git a/dev/boot/amd64-ci.make b/dev/boot/amd64-ci.make
index d711abde..0715151c 100644
--- a/dev/boot/amd64-ci.make
+++ b/dev/boot/amd64-ci.make
@@ -69,8 +69,8 @@ FLAG_GNU=-fshort-wchar -Wall -Wpedantic -Wextra -Werror -D__EFI_x86_64__ -mno-re
-DEFI_FUNCTION_WRAPPER -I./ -I../kernel $(DEBUG_MACRO) $(DISK_DRV) -I../ -c -nostdlib -fno-rtti -fno-exceptions \
-std=c++20 -DBOOTZ_GPT_SUPPORT -DBOOTZ_EPM_SUPPORT -D__HAVE_NE_APIS__ -DZBA_USE_FB -D__NE_AMD64__ -D__NE__ -DNE_AUTO_FORMAT
-BOOTLOADER=bootz.efi
-KERNEL=krnl.efi
+BOOTLOADER=ne_bootz
+KERNEL=ne_kernel
SYSCHK=chk.efi
BOOTNET=net.efi
SCIKIT=libSystem.sys
@@ -130,7 +130,7 @@ efi:
$(HTTP_GET) https://retrage.github.io/edk2-nightly/bin/DEBUGX64_OVMF.fd -O OVMF.fd
BINS=*.bin
-EXECUTABLES=bootz.efi krnl.efi OVMF.fd
+EXECUTABLES=ne_bootz ne_kernel OVMF.fd
TARGETS=$(REM_FLAG) $(OBJ) $(BIN) $(IMG) $(IMG_2) $(EXECUTABLES)
diff --git a/dev/boot/amd64-desktop.make b/dev/boot/amd64-desktop.make
index 05ac5db8..113c6295 100644
--- a/dev/boot/amd64-desktop.make
+++ b/dev/boot/amd64-desktop.make
@@ -71,8 +71,8 @@ FLAG_GNU=-fshort-wchar -D__EFI_x86_64__ -Wall -Wpedantic -Wextra -mno-red-zone -
-DEFI_FUNCTION_WRAPPER -I./ -I../kernel $(DISK_DRV) -I../ -c -nostdlib -fno-rtti -fno-exceptions \
-std=c++20 -DBOOTZ_GPT_SUPPORT -D__HAVE_NE_APIS__ -DZBA_USE_FB -D__NE_AMD64__ -D__NE__ -DNE_AUTO_FORMAT -Wl,--disable-reloc-section
-BOOTLOADER=bootz.efi
-KERNEL=krnl.efi
+BOOTLOADER=ne_bootz
+KERNEL=ne_kernel
SYSCHK=chk.efi
BOOTNET=net.efi
SCIKIT=libSystem.sys
@@ -140,7 +140,7 @@ efi:
$(HTTP_GET) https://retrage.github.io/edk2-nightly/bin/DEBUGX64_OVMF.fd -O OVMF.fd
BINS=*.bin
-EXECUTABLES=bootz.efi krnl.efi OVMF.fd
+EXECUTABLES=ne_bootz ne_kernel OVMF.fd
TARGETS=$(REM_FLAG) $(OBJ) $(BIN) $(IMG) $(IMG_2) $(EXECUTABLES)
diff --git a/dev/boot/arm64-desktop.make b/dev/boot/arm64-desktop.make
index 114d2e7e..409975a4 100644
--- a/dev/boot/arm64-desktop.make
+++ b/dev/boot/arm64-desktop.make
@@ -47,8 +47,8 @@ FLAG_GNU=-fshort-wchar -c -ffreestanding -MMD -mno-red-zone -D__NE_ARM64__ -fno-
-target aarch64-unknown-windows \
-std=c++20 -DBOOTZ_EPM_SUPPORT -DZBA_USE_FB -D__FSKIT_USE_NEFS__ -D__BOOTZ_STANDALONE__ -D__NEOSKRNL__ -D__BOOTZ__ -D__HAVE_NE_APIS__ -D__NE__ -I../ -I../kernel
-BOOT_LOADER=bootz.efi
-KERNEL=krnl.efi
+BOOT_LOADER=ne_bootz
+KERNEL=ne_kernel
SYSCHK=chk.efi
STARTUP=startup.efi
@@ -94,7 +94,7 @@ efi:
$(HTTP_GET) https://retrage.github.io/edk2-nightly/bin/DEBUGAARCH64_QEMU_EFI.fd -O OVMF.fd
BINS=*.bin
-EXECUTABLES=bootz.efi krnl.efi OVMF.fd
+EXECUTABLES=ne_bootz ne_kernel OVMF.fd
TARGETS=$(REM_FLAG) $(OBJ) $(BIN) $(IMG) $(IMG_2) $(EXECUTABLES)
diff --git a/dev/boot/src/BootloaderRsrc.rsrc b/dev/boot/src/BootloaderRsrc.rsrc
index c634a8f6..33bce7f7 100644
--- a/dev/boot/src/BootloaderRsrc.rsrc
+++ b/dev/boot/src/BootloaderRsrc.rsrc
@@ -13,7 +13,7 @@ BEGIN
VALUE "FileVersion", BOOTLOADER_VERSION
VALUE "InternalName", "bootz"
VALUE "LegalCopyright", "Copyright (C) 2024, Amlal El Mahrouss all rights reserved."
- VALUE "OriginalFilename", "bootz.efi"
+ VALUE "OriginalFilename", "ne_bootz"
VALUE "ProductName", "bootz"
VALUE "ProductVersion", BOOTLOADER_VERSION
END
diff --git a/dev/boot/src/HEL/AMD64/BootEFI.cc b/dev/boot/src/HEL/AMD64/BootEFI.cc
index 58610c39..e1dd5d9e 100644
--- a/dev/boot/src/HEL/AMD64/BootEFI.cc
+++ b/dev/boot/src/HEL/AMD64/BootEFI.cc
@@ -193,8 +193,8 @@ EFI_EXTERN_C EFI_API Int32 BootloaderMain(EfiHandlePtr image_handle, EfiSystemTa
handover_hdr->f_FirmwareVendorLen = Boot::BStrLen(sys_table->FirmwareVendor);
// Assign to global 'kHandoverHeader'.
- WideChar kernel_path[256U] = L"krnl.efi";
- UInt32 kernel_path_sz = StrLen("krnl.efi");
+ WideChar kernel_path[256U] = L"ne_kernel";
+ UInt32 kernel_path_sz = StrLen("ne_kernel");
UInt32 sz_ver = sizeof(UInt64);
UInt64 ver = KERNEL_VERSION_BCD;
diff --git a/dev/boot/src/HEL/ARM64/BootEFI.cc b/dev/boot/src/HEL/ARM64/BootEFI.cc
index be2d8acd..413edd5b 100644
--- a/dev/boot/src/HEL/ARM64/BootEFI.cc
+++ b/dev/boot/src/HEL/ARM64/BootEFI.cc
@@ -210,7 +210,7 @@ EFI_EXTERN_C EFI_API Int32 BootloaderMain(EfiHandlePtr image_handle, EfiSystemTa
handover_hdr->f_FirmwareVendorLen = Boot::BStrLen(sys_table->FirmwareVendor);
- Boot::BootFileReader reader_kernel(L"krnl.efi", image_handle);
+ Boot::BootFileReader reader_kernel(L"ne_kernel", image_handle);
reader_kernel.ReadAll(0);
diff --git a/dev/kernel/HALKit/AMD64/HalApplicationProcessor.cc b/dev/kernel/HALKit/AMD64/HalApplicationProcessor.cc
index 7926289f..2ce05e7c 100644
--- a/dev/kernel/HALKit/AMD64/HalApplicationProcessor.cc
+++ b/dev/kernel/HALKit/AMD64/HalApplicationProcessor.cc
@@ -128,6 +128,7 @@ EXTERN_C BOOL mp_register_task(HAL::StackFramePtr stack_frame, ProcessID thrdid)
/// @brief Is the current config SMP aware?
/// @return True if YES, False if not.
/***********************************************************************************/
+
Bool mp_is_smp(Void) noexcept {
return kSMPAware;
}
diff --git a/dev/kernel/HALKit/AMD64/HalControlRegister.s b/dev/kernel/HALKit/AMD64/HalControlRegisterAPI.s
index 631d1d55..631d1d55 100644
--- a/dev/kernel/HALKit/AMD64/HalControlRegister.s
+++ b/dev/kernel/HALKit/AMD64/HalControlRegisterAPI.s
diff --git a/dev/kernel/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cc b/dev/kernel/HALKit/AMD64/HalCoreInterruptHandler.cc
index b70cd51f..01456ae5 100644
--- a/dev/kernel/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cc
+++ b/dev/kernel/HALKit/AMD64/HalCoreInterruptHandler.cc
@@ -19,7 +19,7 @@ STATIC BOOL kIsRunning = NO;
/// @note
STATIC void hal_idt_send_eoi(UInt8 vector) {
((volatile UInt32*) kApicBaseAddress)[0xB0 / 4] = 0;
-
+
if (vector >= kPICCommand && vector <= 0x2F) {
if (vector >= 0x28) {
Kernel::HAL::rt_out8(kPIC2Command, kPICCommand);
@@ -57,7 +57,7 @@ EXTERN_C void idt_handle_pf(Kernel::UIntPtr rsp) {
/// @brief Handle scheduler interrupt.
EXTERN_C void idt_handle_scheduler(Kernel::UIntPtr rsp) {
NE_UNUSED(rsp);
-
+
hal_idt_send_eoi(32);
while (kIsRunning)
diff --git a/dev/kernel/HALKit/AMD64/HalKernelMain.cc b/dev/kernel/HALKit/AMD64/HalKernelMain.cc
index c1558892..edbe058a 100644
--- a/dev/kernel/HALKit/AMD64/HalKernelMain.cc
+++ b/dev/kernel/HALKit/AMD64/HalKernelMain.cc
@@ -146,17 +146,19 @@ EXTERN_C Kernel::Void hal_real_init(Kernel::Void) noexcept {
HAL::mp_init_cores(kHandoverHeader->f_HardwareTables.f_VendorPtr);
#ifdef __FSKIT_INCLUDES_HEFS__
- if (HeFS::fs_init_hefs()) {
- goto hal_spin_kernel;
+ if (!HeFS::fs_init_hefs()) {
+ kout << "HeFS cannot be formated on disk. Aborting\r";
+ DBG_TRAP();
}
#endif
+#ifdef __FSKIT_INCLUDES_NEFS__
if (!NeFS::fs_init_nefs()) {
- kout << "NeFS cannot be formated on the disk. Aborting\r";
+ kout << "NeFS cannot be formated on disk. Aborting\r";
DBG_TRAP();
}
+#endif
-hal_spin_kernel:
HAL::Register64 idt_reg;
idt_reg.Base = reinterpret_cast<UIntPtr>(kInterruptVectorTable);
diff --git a/dev/kernel/HALKit/AMD64/HalPagingMgrAMD64.cc b/dev/kernel/HALKit/AMD64/HalPagingMgr.cc
index 4681b5e5..048cb7c2 100644
--- a/dev/kernel/HALKit/AMD64/HalPagingMgrAMD64.cc
+++ b/dev/kernel/HALKit/AMD64/HalPagingMgr.cc
@@ -57,7 +57,7 @@ STATIC Void mmi_page_status(Detail::PTE* pte) {
/// @param virt a valid virtual address.
/// @return Physical address.
/***********************************************************************************/
-UIntPtr mm_get_phys_address(VoidPtr virt) {
+EXTERN_C UIntPtr mm_get_page_addr(VoidPtr virt) {
const UInt64 kVMAddr = (UInt64) virt;
const UInt64 kMask9Bits = 0x1FFULL;
const UInt64 kPageOffsetMask = 0xFFFULL;
@@ -102,7 +102,7 @@ UIntPtr mm_get_phys_address(VoidPtr virt) {
/// @brief clflush+mfence helper function.
/***********************************************************************************/
EXTERN_C Int32 mm_memory_fence(VoidPtr virtual_address) {
- if (!virtual_address || !mm_get_phys_address(virtual_address)) return kErrorInvalidData;
+ if (!virtual_address || !mm_get_page_addr(virtual_address)) return kErrorInvalidData;
asm volatile("clflush (%0)" : : "r"(virtual_address) : "memory");
asm volatile("mfence" ::: "memory");
diff --git a/dev/kernel/HALKit/AMD64/HalProcessorAMD64.cc b/dev/kernel/HALKit/AMD64/HalProcessor.cc
index 2fc18e2f..6ebbea08 100644
--- a/dev/kernel/HALKit/AMD64/HalProcessorAMD64.cc
+++ b/dev/kernel/HALKit/AMD64/HalProcessor.cc
@@ -16,6 +16,15 @@
*/
namespace Kernel::HAL {
+inline Bool hal_has_msr() noexcept {
+ static UInt32 eax, unused, edx; // eax, edx
+
+ __get_cpuid(1, &eax, &unused, &unused, &edx);
+
+ // edx returns the flag for MSR (which is 1 shifted to 5.)
+ return edx & (1 << 5);
+}
+
Void hal_get_msr(UInt32 msr, UInt32* lo, UInt32* hi) noexcept {
if (!lo || !hi) return;
asm volatile("rdmsr" : "=a"(*lo), "=d"(*hi) : "c"(msr));
diff --git a/dev/kernel/HALKit/AMD64/HalSchedulerCorePrimitivesAMD64.cc b/dev/kernel/HALKit/AMD64/HalSchedulerCorePrimitives.cc
index 0c468e14..0c468e14 100644
--- a/dev/kernel/HALKit/AMD64/HalSchedulerCorePrimitivesAMD64.cc
+++ b/dev/kernel/HALKit/AMD64/HalSchedulerCorePrimitives.cc
diff --git a/dev/kernel/HALKit/AMD64/HalTimerAMD64.cc b/dev/kernel/HALKit/AMD64/HalTimer.cc
index 13573880..13573880 100644
--- a/dev/kernel/HALKit/AMD64/HalTimerAMD64.cc
+++ b/dev/kernel/HALKit/AMD64/HalTimer.cc
diff --git a/dev/kernel/HALKit/AMD64/HalUtilsAPI.asm b/dev/kernel/HALKit/AMD64/HalUtilsAPI.asm
index ab639992..11336229 100644
--- a/dev/kernel/HALKit/AMD64/HalUtilsAPI.asm
+++ b/dev/kernel/HALKit/AMD64/HalUtilsAPI.asm
@@ -22,5 +22,3 @@ rt_install_tib:
ret
;; //////////////////////////////////////////////////// ;;
-
-[extern kApicMadtAddressesCount]
diff --git a/dev/kernel/HALKit/AMD64/Network/Generic+Basic+RTL8139.cc b/dev/kernel/HALKit/AMD64/Network/Generic+Basic+RTL8139.cc
index 7c611c26..3ccbfa24 100644
--- a/dev/kernel/HALKit/AMD64/Network/Generic+Basic+RTL8139.cc
+++ b/dev/kernel/HALKit/AMD64/Network/Generic+Basic+RTL8139.cc
@@ -79,7 +79,7 @@ EXTERN_C void rtl_rtl8139_interrupt_handler() {
// While we receive data.
while ((rt_in8(kRTLIOBase + 0x37) & 0x01) == 0) {
// We grab an offset from the RX buffer.
- UInt32 offset = kRXOffset % kRXBufferSize;
+ UInt32 offset = kRXOffset % kRXBufferSize;
// If the offset is too high, we reset it.
if (offset >= (kRXBufferSize - 16)) {
diff --git a/dev/kernel/HALKit/AMD64/Processor.h b/dev/kernel/HALKit/AMD64/Processor.h
index 5a70b465..80dc7a1d 100644
--- a/dev/kernel/HALKit/AMD64/Processor.h
+++ b/dev/kernel/HALKit/AMD64/Processor.h
@@ -174,16 +174,7 @@ Void mp_init_cores(VoidPtr vendor_ptr) noexcept;
/// @retval true it does exists.
/// @retval false it doesn't.
/***********************************************************************************/
-inline Bool hal_has_msr() noexcept {
- static UInt32 eax, unused, edx; // eax, edx
-
- __get_cpuid(1, &eax, &unused, &unused, &edx);
-
- // edx returns the flag for MSR (which is 1 shifted to 5.)
- return edx & (1 << 5);
-}
-
-UIntPtr mm_get_phys_address(VoidPtr virtual_address);
+Bool hal_has_msr() noexcept;
/***********************************************************************************/
/// @brief Get Model specific register inside core.
@@ -271,6 +262,8 @@ EXTERN_C Void rt_sti();
EXTERN_C Void rt_cld();
EXTERN_C Void rt_std();
+EXTERN_C UIntPtr mm_get_page_addr(VoidPtr virtual_address);
+
EXTERN_C Int32 mm_memory_fence(VoidPtr virtual_address);
} // namespace Kernel::HAL
diff --git a/dev/kernel/HALKit/AMD64/Storage/AHCI+Generic.cc b/dev/kernel/HALKit/AMD64/Storage/AHCI+Generic.cc
index b530a730..b30bfc32 100644
--- a/dev/kernel/HALKit/AMD64/Storage/AHCI+Generic.cc
+++ b/dev/kernel/HALKit/AMD64/Storage/AHCI+Generic.cc
@@ -359,7 +359,7 @@ STATIC Bool drv_init_command_structures_ahci() {
return NO;
}
- UIntPtr clb_phys = HAL::mm_get_phys_address(clb_mem);
+ UIntPtr clb_phys = HAL::mm_get_page_addr(clb_mem);
kSATAHba->Ports[kSATAIndex].Clb = (UInt32) (clb_phys & 0xFFFFFFFF);
kSATAHba->Ports[kSATAIndex].Clbu = (UInt32) (clb_phys >> 32);
@@ -379,7 +379,7 @@ STATIC Bool drv_init_command_structures_ahci() {
return NO;
}
- UIntPtr ct_phys = HAL::mm_get_phys_address(ct_mem);
+ UIntPtr ct_phys = HAL::mm_get_page_addr(ct_mem);
header[i].Ctba = (UInt32) (ct_phys & 0xFFFFFFFF);
header[i].Ctbau = (UInt32) (ct_phys >> 32);
diff --git a/dev/kernel/HALKit/ARM64/HalPagingMgrARM64.cc b/dev/kernel/HALKit/ARM64/HalPagingMgr.cc
index faad6778..faad6778 100644
--- a/dev/kernel/HALKit/ARM64/HalPagingMgrARM64.cc
+++ b/dev/kernel/HALKit/ARM64/HalPagingMgr.cc
diff --git a/dev/kernel/HALKit/ARM64/HalSchedulerCoreARM64.cc b/dev/kernel/HALKit/ARM64/HalSchedulerCore.cc
index b3f1b62a..b3f1b62a 100644
--- a/dev/kernel/HALKit/ARM64/HalSchedulerCoreARM64.cc
+++ b/dev/kernel/HALKit/ARM64/HalSchedulerCore.cc
diff --git a/dev/kernel/HALKit/ARM64/HalSchedulerCorePrimitivesARM64.cc b/dev/kernel/HALKit/ARM64/HalSchedulerCorePrimitives.cc
index ee286639..ee286639 100644
--- a/dev/kernel/HALKit/ARM64/HalSchedulerCorePrimitivesARM64.cc
+++ b/dev/kernel/HALKit/ARM64/HalSchedulerCorePrimitives.cc
diff --git a/dev/kernel/HALKit/ARM64/HalTimerARM64.cc b/dev/kernel/HALKit/ARM64/HalTimer.cc
index 2a595f11..2a595f11 100644
--- a/dev/kernel/HALKit/ARM64/HalTimerARM64.cc
+++ b/dev/kernel/HALKit/ARM64/HalTimer.cc
diff --git a/dev/kernel/HALKit/ARM64/Processor.h b/dev/kernel/HALKit/ARM64/Processor.h
index 38669b2f..068b798d 100644
--- a/dev/kernel/HALKit/ARM64/Processor.h
+++ b/dev/kernel/HALKit/ARM64/Processor.h
@@ -38,7 +38,7 @@ enum {
/// @return Status code of page manip.
EXTERN_C Int32 mm_map_page(VoidPtr virtual_address, VoidPtr physical_address, UInt32 flags);
-EXTERN_C UIntPtr mm_get_phys_address(VoidPtr virtual_address);
+EXTERN_C UIntPtr mm_get_page_addr(VoidPtr virtual_address);
typedef UIntPtr Reg;
typedef Register64 Register;
diff --git a/dev/kernel/KernelKit/KPC.h b/dev/kernel/KernelKit/KPC.h
index 944c8efc..811d7f5d 100644
--- a/dev/kernel/KernelKit/KPC.h
+++ b/dev/kernel/KernelKit/KPC.h
@@ -64,7 +64,8 @@ inline constexpr KPCError kErrorUnrecoverableDisk = 63;
inline constexpr KPCError kErrorFileLocked = 64;
inline constexpr KPCError kErrorDiskIsTooTiny = 65;
/// Kernel errors.
-inline constexpr KPCError kErrorDmaExhausted = 101;
+inline constexpr KPCError kErrorDmaExhausted = 101;
+inline constexpr KPCError kErrorOutOfBitMapMemory = 102;
/// Generic errors.
inline constexpr KPCError kErrorUnimplemented = -1;
diff --git a/dev/kernel/KernelKit/LockDelegate.h b/dev/kernel/KernelKit/LockDelegate.h
index a8162897..b5977c92 100644
--- a/dev/kernel/KernelKit/LockDelegate.h
+++ b/dev/kernel/KernelKit/LockDelegate.h
@@ -11,8 +11,8 @@
namespace Kernel {
enum {
- kLockInvalid,
- kLockDone = 200,
+ kLockInvalid = 0,
+ kLockDone = 200,
kLockTimedOut,
kLockCount = 3,
};
diff --git a/dev/kernel/KernelKit/ZXD.h b/dev/kernel/KernelKit/ZXD.h
index 2c5a33c4..10af568b 100644
--- a/dev/kernel/KernelKit/ZXD.h
+++ b/dev/kernel/KernelKit/ZXD.h
@@ -17,25 +17,25 @@ struct ZXD_STUB_HEADER;
/// @brief ZXD executable header
/// @details This header is used to identify ZXD executable files.
struct ZXD_EXEC_HEADER {
- UInt32 fMagic;
- UInt32 fVersion;
- UInt32 fFlags;
- UInt32 fHdrSize;
- UInt32 fCRC32;
- UInt32 fAssigneeSignature;
- UInt32 fIssuerSingature;
+ UInt32 fMagic;
+ UInt32 fVersion;
+ UInt32 fFlags;
+ UInt32 fHdrSize;
+ UInt32 fCRC32;
+ UInt32 fAssigneeSignature;
+ UInt32 fIssuerSingature;
UIntPtr fExecOffset;
- SizeT fExecSize;
+ SizeT fExecSize;
UIntPtr fStubOffset;
- SizeT fStubSize;
- SizeT fStubAlign;
- SizeT fStubCount;
+ SizeT fStubSize;
+ SizeT fStubAlign;
+ SizeT fStubCount;
};
/// @brief ZXD stub header
/// @details This header is used to identify ZXD stub files. It contains the size of the stub, the
/// offset of the stub, and the CRC32 checksum of the stub.
-struct ZXD_STUB_HEADER : public ZXD_EXEC_HEADER {
+struct ZXD_STUB_HEADER {
UInt32 fStubSize;
UInt32 fStubOffset;
UInt32 fStubCRC32;
diff --git a/dev/kernel/amd64-ci.make b/dev/kernel/amd64-ci.make
index 38021901..c728b29c 100644
--- a/dev/kernel/amd64-ci.make
+++ b/dev/kernel/amd64-ci.make
@@ -35,7 +35,7 @@ LDFLAGS = -e hal_init_platform --subsystem=17 --image-base 0x4000000
LDOBJ = obj/*.obj
# This file is the Kernel, responsible of task, memory, driver, sci, disk and device management.
-KERNEL_IMG = krnl.efi
+KERNEL_IMG = ne_kernel
.PHONY: error
error:
diff --git a/dev/kernel/amd64-desktop.make b/dev/kernel/amd64-desktop.make
index ae2307fd..49593101 100644
--- a/dev/kernel/amd64-desktop.make
+++ b/dev/kernel/amd64-desktop.make
@@ -37,7 +37,7 @@ LDFLAGS = -e hal_init_platform --subsystem=17 --image-base 0x10000000
LDOBJ = obj/*.obj
# This file is the Kernel, responsible of task, memory, driver, sci, disk and device management.
-KERNEL_IMG = krnl.efi
+KERNEL_IMG = ne_kernel
.PHONY: error
error:
diff --git a/dev/kernel/arm64-desktop.make b/dev/kernel/arm64-desktop.make
index 31d8f49e..423391af 100644
--- a/dev/kernel/arm64-desktop.make
+++ b/dev/kernel/arm64-desktop.make
@@ -23,7 +23,7 @@ LDFLAGS = -subsystem:efi_application -entry:hal_init_platform /nodefaultlib
LDOBJ = obj/*.obj
# This file is the Kernel, responsible of task management and memory.
-KERNEL = krnl.efi
+KERNEL = ne_kernel
.PHONY: error
error:
diff --git a/dev/kernel/kernel_rsrc.rsrc b/dev/kernel/kernel_rsrc.rsrc
index 8d0093e4..5b1cb14f 100644
--- a/dev/kernel/kernel_rsrc.rsrc
+++ b/dev/kernel/kernel_rsrc.rsrc
@@ -13,7 +13,7 @@ BEGIN
VALUE "FileVersion", KERNEL_VERSION
VALUE "InternalName", "krnl"
VALUE "LegalCopyright", "(c) 2024-2025 Amlal El Mahrouss, all rights reserved."
- VALUE "OriginalFilename", "krnl.efi"
+ VALUE "OriginalFilename", "ne_kernel"
VALUE "ProductName", "NeKernel"
VALUE "ProductVersion", KERNEL_VERSION
END
diff --git a/dev/kernel/src/BitMapMgr.cc b/dev/kernel/src/BitMapMgr.cc
index 4301ce5b..df678d41 100644
--- a/dev/kernel/src/BitMapMgr.cc
+++ b/dev/kernel/src/BitMapMgr.cc
@@ -22,6 +22,8 @@
namespace Kernel {
namespace HAL {
namespace Detail {
+ STATIC SizeT kBitMapCursor = 0UL;
+
/***********************************************************************************/
/// \brief Proxy Interface to manage a bitmap allocator.
/***********************************************************************************/
@@ -47,6 +49,8 @@ namespace HAL {
UIntPtr* ptr_bit_set = reinterpret_cast<UIntPtr*>(page_ptr);
+ kBitMapCursor += ptr_bit_set[kBitMapSizeIdx];
+
ptr_bit_set[kBitMapMagIdx] = kBitMapMagic;
ptr_bit_set[kBitMapUsedIdx] = No;
@@ -59,7 +63,6 @@ namespace HAL {
UInt32 flags = kMMFlagsPresent;
if (wr) flags |= kMMFlagsWr;
-
if (user) flags |= kMMFlagsUser;
return flags;
@@ -77,11 +80,18 @@ namespace HAL {
auto FindBitMap(VoidPtr base_ptr, SizeT size, Bool wr, Bool user, SizeT pad) -> VoidPtr {
if (!size) return nullptr;
+ if (kBitMapCursor > kKernelBitMpSize) {
+ err_global_get() = kErrorOutOfBitMapMemory;
+
+ (Void)(kout << "Bitmap limit reached, can't allocate more bitmaps." << kendl);
+ return nullptr;
+ }
+
VoidPtr base = reinterpret_cast<VoidPtr>((UIntPtr) base_ptr);
MUST_PASS(base);
- static SizeT biggest = 0UL;
+ STATIC SizeT biggest = 0UL;
while (YES) {
UIntPtr* ptr_bit_set = reinterpret_cast<UIntPtr*>(base);
@@ -99,6 +109,8 @@ namespace HAL {
if (biggest < (size + pad)) biggest = size + pad;
+ kBitMapCursor += size + pad;
+
return (VoidPtr) ptr_bit_set;
}
} else if (ptr_bit_set[kBitMapMagIdx] != kBitMapMagic) {
@@ -113,6 +125,8 @@ namespace HAL {
if (biggest < (size + pad)) biggest = (size + pad);
+ kBitMapCursor += size + pad;
+
return (VoidPtr) ptr_bit_set;
}
diff --git a/dev/kernel/src/FS/HeFS+FileSystemParser.cc b/dev/kernel/src/FS/HeFS+FileSystemParser.cc
index a18abaf8..893f43ef 100644
--- a/dev/kernel/src/FS/HeFS+FileSystemParser.cc
+++ b/dev/kernel/src/FS/HeFS+FileSystemParser.cc
@@ -758,9 +758,8 @@ _Output Bool HeFileSystemParser::Format(_Input _Output DriveTrait* mnt, _Input c
}
if (drv_std_get_size() < kHeFSMinimumDiskSize) {
- (Void)(kout << "HeFS requires at least 128 GiB of free space." << kendl);
- err_global_get() = kErrorDisk;
- return NO;
+ (Void)(kout << "HeFS recommends at least 128 GiB of free space." << kendl);
+ (Void)(kout << "The OS will still try to format a HeFS disk here." << kendl);
}
HEFS_BOOT_NODE* boot = (HEFS_BOOT_NODE*) RTL_ALLOCA(sizeof(HEFS_BOOT_NODE));
diff --git a/dev/kernel/src/HeapMgr.cc b/dev/kernel/src/HeapMgr.cc
index 5280bcc3..2fdfe748 100644
--- a/dev/kernel/src/HeapMgr.cc
+++ b/dev/kernel/src/HeapMgr.cc
@@ -25,8 +25,8 @@
//! @file HeapMgr.cc
//! @brief Heap system that serves as the main memory manager.
-#define kMemoryMgrMagic (0xD4D75)
-#define kMemoryMgrAlignSz (4U)
+#define kHeapMgrMagic (0xD4D75)
+#define kHeapMgrAlignSz (4U)
namespace Kernel {
/// @brief Implementation details.
@@ -68,7 +68,7 @@ namespace Detail {
UInt32 fPad;
/// @brief Padding bytes for header.
- UInt8 fPadding[kMemoryMgrAlignSz];
+ UInt8 fPadding[kHeapMgrAlignSz];
};
/// @brief Check for heap address validity.
@@ -112,7 +112,7 @@ _Output VoidPtr mm_alloc_ptr(SizeT sz, Bool wr, Bool user, SizeT pad_amount) {
sizeof(Detail::MM_INFORMATION_BLOCK));
heap_info_ptr->fSize = sz_fix;
- heap_info_ptr->fMagic = kMemoryMgrMagic;
+ heap_info_ptr->fMagic = kHeapMgrMagic;
heap_info_ptr->fCRC32 = 0U; // dont fill it for now.
heap_info_ptr->fOffset =
reinterpret_cast<UIntPtr>(heap_info_ptr) + sizeof(Detail::MM_INFORMATION_BLOCK);
@@ -122,7 +122,7 @@ _Output VoidPtr mm_alloc_ptr(SizeT sz, Bool wr, Bool user, SizeT pad_amount) {
heap_info_ptr->fPresent = Yes;
heap_info_ptr->fPad = pad_amount;
- rt_set_memory(heap_info_ptr->fPadding, 0, kMemoryMgrAlignSz);
+ rt_set_memory(heap_info_ptr->fPadding, 0, kHeapMgrAlignSz);
auto result = reinterpret_cast<VoidPtr>(heap_info_ptr->fOffset);
@@ -191,7 +191,7 @@ _Output Int32 mm_free_ptr(VoidPtr heap_ptr) {
reinterpret_cast<Detail::MM_INFORMATION_BLOCK_PTR>((UIntPtr) (heap_ptr) -
sizeof(Detail::MM_INFORMATION_BLOCK));
- if (heap_info_ptr && heap_info_ptr->fMagic == kMemoryMgrMagic) {
+ if (heap_info_ptr && heap_info_ptr->fMagic == kHeapMgrMagic) {
if (!heap_info_ptr->fPresent) {
return kErrorHeapNotPresent;
}
@@ -231,7 +231,7 @@ _Output Boolean mm_is_valid_ptr(VoidPtr heap_ptr) {
reinterpret_cast<Detail::MM_INFORMATION_BLOCK_PTR>((UIntPtr) (heap_ptr) -
sizeof(Detail::MM_INFORMATION_BLOCK));
- return (heap_info_ptr && heap_info_ptr->fPresent && heap_info_ptr->fMagic == kMemoryMgrMagic);
+ return (heap_info_ptr && heap_info_ptr->fPresent && heap_info_ptr->fMagic == kHeapMgrMagic);
}
return No;
@@ -247,7 +247,7 @@ _Output Boolean mm_protect_ptr(VoidPtr heap_ptr) {
sizeof(Detail::MM_INFORMATION_BLOCK));
/// if valid, present and is heap header, then compute crc32
- if (heap_info_ptr && heap_info_ptr->fPresent && kMemoryMgrMagic == heap_info_ptr->fMagic) {
+ if (heap_info_ptr && heap_info_ptr->fPresent && kHeapMgrMagic == heap_info_ptr->fMagic) {
heap_info_ptr->fCRC32 =
ke_calculate_crc32((Char*) heap_info_ptr->fOffset, heap_info_ptr->fSize);
diff --git a/dev/kernel/src/PEFCodeMgr.cc b/dev/kernel/src/PEFCodeMgr.cc
index e810651a..ed72473f 100644
--- a/dev/kernel/src/PEFCodeMgr.cc
+++ b/dev/kernel/src/PEFCodeMgr.cc
@@ -161,7 +161,7 @@ ErrorOr<VoidPtr> PEFLoader::FindSymbol(const Char* name, Int32 kind) {
kout << "PEFLoader: Information: Loaded stub: " << container_header->Name << "!\r";
auto ret = HAL::mm_map_page((VoidPtr) container_header->VMAddress,
- (VoidPtr) HAL::mm_get_phys_address(container_blob_value),
+ (VoidPtr) HAL::mm_get_page_addr(container_blob_value),
HAL::kMMFlagsPresent | HAL::kMMFlagsUser);
if (ret != kErrorSuccess) {
diff --git a/dev/kernel/src/UserProcessScheduler.cc b/dev/kernel/src/UserProcessScheduler.cc
index 77421f5f..f900f984 100644
--- a/dev/kernel/src/UserProcessScheduler.cc
+++ b/dev/kernel/src/UserProcessScheduler.cc
@@ -403,10 +403,10 @@ ProcessID UserProcessScheduler::Spawn(const Char* name, VoidPtr code, VoidPtr im
#ifdef __NE_VIRTUAL_MEMORY_SUPPORT__
HAL::mm_map_page((VoidPtr) process.StackFrame->IP,
- (VoidPtr) HAL::mm_get_phys_address((VoidPtr) process.StackFrame->IP),
+ (VoidPtr) HAL::mm_get_page_addr((VoidPtr) process.StackFrame->IP),
HAL::kMMFlagsUser | HAL::kMMFlagsPresent);
HAL::mm_map_page((VoidPtr) process.StackFrame->SP,
- (VoidPtr) HAL::mm_get_phys_address((VoidPtr) process.StackFrame->SP),
+ (VoidPtr) HAL::mm_get_page_addr((VoidPtr) process.StackFrame->SP),
HAL::kMMFlagsUser | HAL::kMMFlagsPresent);
#endif // ifdef __NE_VIRTUAL_MEMORY_SUPPORT__
diff --git a/docs/drawio/OS_DESIGN.drawio b/docs/drawio/OS_DESIGN.drawio
index 3a03540c..c428d137 100644
--- a/docs/drawio/OS_DESIGN.drawio
+++ b/docs/drawio/OS_DESIGN.drawio
@@ -8,37 +8,37 @@
<mxGeometry x="240" y="340" width="360" height="30" as="geometry"/>
</mxCell>
<mxCell id="ifhO3zQZNW-sXvZMTmu8-3" value="&lt;p class=&quot;p1&quot;&gt;&lt;b&gt;Applications &amp;amp; Dynamically Linked Libraries (Ring 3, EL0)&lt;/b&gt;&lt;/p&gt;" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
- <mxGeometry x="240" y="240" width="360" height="35" as="geometry"/>
+ <mxGeometry x="240" y="240" width="180" height="35" as="geometry"/>
</mxCell>
<mxCell id="ifhO3zQZNW-sXvZMTmu8-13" value="&lt;p class=&quot;p1&quot;&gt;&lt;b&gt;NeKernel MP Kernel, DDK, and Drivers (Ring 0, EL1)&lt;/b&gt;&lt;/p&gt;" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="240" y="450" width="360" height="60" as="geometry"/>
</mxCell>
- <mxCell id="4" value="&lt;p class=&quot;p1&quot;&gt;&lt;b&gt;SCI and DDK Kernel Calls (Ring 0 / Ring 2, EL0 to EL1 Transitions)&lt;/b&gt;&lt;/p&gt;" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
+ <mxCell id="4" value="&lt;p class=&quot;p1&quot;&gt;&lt;b&gt;SCI and DDK calls (Ring 0 / Ring 2, EL0 to EL1 Transitions)&lt;/b&gt;&lt;/p&gt;" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="240" y="380" width="360" height="60" as="geometry"/>
</mxCell>
<mxCell id="5" value="&lt;p class=&quot;p1&quot;&gt;&lt;b&gt;HAL&lt;/b&gt;&lt;/p&gt;" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="404.5" y="525" width="195.5" height="60" as="geometry"/>
</mxCell>
- <mxCell id="6" value="&lt;p class=&quot;p1&quot;&gt;&lt;b&gt;Kernel Kits&lt;/b&gt;&lt;/p&gt;" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
- <mxGeometry x="240" y="525" width="154.5" height="60" as="geometry"/>
+ <mxCell id="6" value="&lt;p class=&quot;p1&quot;&gt;&lt;b&gt;NeKernel&lt;/b&gt;&lt;/p&gt;" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
+ <mxGeometry x="140" y="525" width="250" height="60" as="geometry"/>
</mxCell>
- <mxCell id="7" value="&lt;p class=&quot;p1&quot;&gt;&lt;b&gt;BootZ Bootloader and Handover&lt;/b&gt;&lt;/p&gt;" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
- <mxGeometry x="240" y="600" width="360" height="60" as="geometry"/>
+ <mxCell id="7" value="&lt;p class=&quot;p1&quot;&gt;&lt;b&gt;BootZ Bootloader and Handover Protocol&lt;/b&gt;&lt;/p&gt;" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
+ <mxGeometry x="140" y="600" width="460" height="60" as="geometry"/>
</mxCell>
<mxCell id="9" value="&lt;p class=&quot;p1&quot;&gt;&lt;b&gt;Firmware (EFI, NeKernel.org&#39;s FW)&lt;/b&gt;&lt;/p&gt;" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
- <mxGeometry x="240" y="670" width="357.75" height="60" as="geometry"/>
+ <mxGeometry x="140" y="670" width="460" height="60" as="geometry"/>
</mxCell>
- <mxCell id="10" value="Privileged" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
- <mxGeometry x="660" y="460" width="60" height="30" as="geometry"/>
+ <mxCell id="13" value="&lt;p class=&quot;p1&quot;&gt;&lt;b&gt;System SDK Stable API&lt;/b&gt;&lt;/p&gt;" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
+ <mxGeometry x="238.88" y="290" width="360" height="40" as="geometry"/>
</mxCell>
- <mxCell id="11" value="User" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
- <mxGeometry x="660" y="300" width="60" height="30" as="geometry"/>
+ <mxCell id="15" value="&lt;p class=&quot;p1&quot;&gt;&lt;b&gt;Services (Ring 3, EL0)&lt;/b&gt;&lt;/p&gt;" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
+ <mxGeometry x="430" y="240" width="170" height="35" as="geometry"/>
</mxCell>
- <mxCell id="12" value="Driver" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
- <mxGeometry x="660" y="380" width="60" height="30" as="geometry"/>
+ <mxCell id="16" value="&lt;p class=&quot;p1&quot;&gt;&lt;b&gt;Hypr86&lt;/b&gt;&lt;/p&gt;&lt;p class=&quot;p1&quot;&gt;&lt;b&gt;Virtual Machine&lt;/b&gt;&lt;/p&gt;" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
+ <mxGeometry x="140" y="240" width="90" height="270" as="geometry"/>
</mxCell>
- <mxCell id="13" value="&lt;p class=&quot;p1&quot;&gt;&lt;b&gt;System SDK Stable API&lt;/b&gt;&lt;/p&gt;" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
- <mxGeometry x="238.88" y="290" width="360" height="40" as="geometry"/>
+ <mxCell id="19" value="&lt;h1 style=&quot;margin-top: 0px;&quot;&gt;NeKernel&lt;/h1&gt;&lt;p&gt;This shows how NeKernel is&lt;/p&gt;&lt;p&gt;designed, some parts here are&lt;/p&gt;&lt;p&gt;not present yet, such as Hypr86.&lt;/p&gt;&lt;p&gt;This diagram was made for the&lt;/p&gt;&lt;p&gt;developers to understand NeKernel better.&lt;/p&gt;" style="text;html=1;whiteSpace=wrap;overflow=hidden;rounded=0;" vertex="1" parent="1">
+ <mxGeometry x="630" y="240" width="180" height="190" as="geometry"/>
</mxCell>
</root>
</mxGraphModel>
diff --git a/public/tools/manual/src/CommandLine.cc b/public/tools/manual/src/CommandLine.cc
index 0d9c4136..a1cd9094 100644
--- a/public/tools/manual/src/CommandLine.cc
+++ b/public/tools/manual/src/CommandLine.cc
@@ -5,8 +5,8 @@ SInt32 _NeMain(SInt32 argc, Char* argv[]) {
SCI_UNUSED(argv);
if (argc < 2) {
- PrintOut(nullptr, "HELP: manual <tutorial_name>\n");
- return EXIT_FAILURE;
+ PrintOut(nullptr, "HELP: manual <tutorial_name>\n");
+ return EXIT_FAILURE;
}
return EXIT_SUCCESS;
diff --git a/public/tools/ping/src/CommandLine.cc b/public/tools/ping/src/CommandLine.cc
index 9aae0ea9..7ef58e81 100644
--- a/public/tools/ping/src/CommandLine.cc
+++ b/public/tools/ping/src/CommandLine.cc
@@ -18,11 +18,11 @@ SInt32 _NeMain(SInt32 argc, Char* argv[]) {
return EXIT_FAILURE;
}
- SInt32 bytes = 64; // Simulated response size
- SInt32 time = 100 + (i * 10); // Simulated response time
- SInt32 ttl = 64;
+ SInt32 bytes = 64; // Simulated response size
+ SInt32 time = 100 + (i * 10); // Simulated response time
+ SInt32 ttl = 64;
- PrintOut(nullptr, "Reply from %s: bytes=%i time=%ims TTL=%i\n", argv[1], bytes, time, ttl);
+ PrintOut(nullptr, "Reply from %s: bytes=%i time=%ims TTL=%i\n", argv[1], bytes, time, ttl);
}
return EXIT_SUCCESS;