summaryrefslogtreecommitdiffhomepage
path: root/dev
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal.elmahrouss@icloud.com>2025-03-11 08:10:55 +0100
committerAmlal El Mahrouss <amlal.elmahrouss@icloud.com>2025-03-11 08:10:55 +0100
commit0a2760d8a5ce09ae77cfc097ece4100579164f9d (patch)
tree38be73d31c13aa0ac3a7883dfd22cc2b8208dbb9 /dev
parentc6d9cc48540b380583fc2bb8fcfe59a9113d0e19 (diff)
Many AHCI improvements and IPC tweaks.
Signed-off-by: Amlal El Mahrouss <amlal.elmahrouss@icloud.com>
Diffstat (limited to 'dev')
-rw-r--r--dev/Boot/Mod/SysChk/amd64.json3
-rw-r--r--dev/Boot/amd64-desktop.make17
-rw-r--r--dev/Boot/src/HEL/AMD64/BootEFI.cc18
-rw-r--r--dev/Kernel/FirmwareKit/EFI/EFI.h2
-rw-r--r--dev/Kernel/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cc2
-rw-r--r--dev/Kernel/HALKit/AMD64/Storage/AHCI.cc110
-rw-r--r--dev/Kernel/HALKit/AMD64/Storage/DMA.cc4
-rw-r--r--dev/Kernel/NetworkKit/IPC.h31
-rw-r--r--dev/Kernel/NetworkKit/MAC.h10
-rw-r--r--dev/Kernel/src/ACPIFactoryInterface.cc5
-rw-r--r--dev/Kernel/src/FS/NeFS.cc8
-rw-r--r--dev/Kernel/src/Network/IPCAddr.cc18
-rw-r--r--dev/Kernel/src/Network/IPCMsg.cc15
-rw-r--r--dev/Kernel/src/Network/MACAddressGetter.cc15
-rw-r--r--dev/Kernel/src/Network/NetworkDevice.cc20
-rw-r--r--dev/Mod/ACPI/ACPIFactoryInterface.h7
-rw-r--r--dev/Mod/AHCI/AHCI.h4
-rw-r--r--dev/Mod/Pwr/PowerFactory.h2
18 files changed, 175 insertions, 116 deletions
diff --git a/dev/Boot/Mod/SysChk/amd64.json b/dev/Boot/Mod/SysChk/amd64.json
index dd6e141f..6a6a4de0 100644
--- a/dev/Boot/Mod/SysChk/amd64.json
+++ b/dev/Boot/Mod/SysChk/amd64.json
@@ -5,9 +5,8 @@
"sources_path": ["*.cc", "*.S", "../../src/HEL/AMD64/*.cc", "../../src/HEL/AMD64/*.S", "../../src/*.cc"],
"output_name": "syschk.sys",
"compiler_flags": [
- "-ffreestanding",
"-nostdlib",
- "-std=c++23",
+ "-std=c++20",
"-fPIC",
"-fno-rtti",
"-fno-exceptions",
diff --git a/dev/Boot/amd64-desktop.make b/dev/Boot/amd64-desktop.make
index ae2a8aca..2c8c5321 100644
--- a/dev/Boot/amd64-desktop.make
+++ b/dev/Boot/amd64-desktop.make
@@ -49,7 +49,7 @@ DEBUG_MACRO = -D__DEBUG__
endif
ifeq ($(shell uname), Darwin)
-EMU_FLAGS=-net none -smp 4 -m 8G \
+EMU_FLAGS=-M q35 -net none -smp 4 -m 8G \
-bios $(BIOS) -cdrom $(BOOT) -boot d -drive \
file=fat:rw:src/Root/,index=3,format=raw
endif
@@ -94,11 +94,14 @@ all: compile-amd64
$(COPY) ./Mod/SysChk/$(SYSCHK) src/Root/$(SYSCHK)
$(COPY) ../LibSCI/$(SCIKIT) src/Root/$(SCIKIT)
$(COPY) src/$(BOOTLOADER) src/Root/$(BOOTLOADER)
- xorriso -as mkisofs -R -r -J \
- -no-emul-boot -boot-load-size 4 -boot-info-table -hfsplus \
- -apm-block-size 2048 --efi-boot EFI/BOOT/BOOTX64.EFI \
- -efi-boot-part --efi-boot-image --protective-msdos-label \
- src/Root -o $(BOOT)
+ xorriso -as mkisofs \
+ -iso-level 3 \
+ -r -V NeOS \
+ -J -joliet-long \
+ -append_partition 2 0xef src/Root/EFI/BOOT/BOOTX64.EFI \
+ -partition_cyl_align all \
+ -o $(BOOT) \
+ src/Root/
ifneq ($(DEBUG_SUPPORT), )
@@ -115,7 +118,7 @@ compile-amd64:
.PHONY: run-efi-amd64-ahci
run-efi-amd64-ahci:
- $(EMU) $(EMU_FLAGS) -hda $(IMG) -s -S -trace ahci_* -boot menu=on
+ $(EMU) $(EMU_FLAGS) -drive id=disk,file=$(IMG),if=none -device ich9-ahci,id=ahci -device ide-hd,drive=disk,bus=ahci.0 -s -S -trace ahci_* -boot menu=on
.PHONY: run-efi-amd64-ata-pio
run-efi-amd64-ata-pio:
diff --git a/dev/Boot/src/HEL/AMD64/BootEFI.cc b/dev/Boot/src/HEL/AMD64/BootEFI.cc
index a0f4c05e..84a4a777 100644
--- a/dev/Boot/src/HEL/AMD64/BootEFI.cc
+++ b/dev/Boot/src/HEL/AMD64/BootEFI.cc
@@ -196,17 +196,8 @@ EFI_EXTERN_C EFI_API Int32 Main(EfiHandlePtr image_handle,
// Update handover file specific table and phyiscal start field.
//-------------------------------------------------------------//
- handover_hdr->f_BitMapStart = nullptr; /* Start of bitmap. */
- handover_hdr->f_BitMapSize = kHandoverBitMapSz; /* Size of bitmap. */
-
- while (BS->AllocatePool(EfiLoaderData, handover_hdr->f_BitMapSize, &handover_hdr->f_BitMapStart) != kEfiOk)
- {
- if (handover_hdr->f_BitMapStart)
- {
- BS->FreePool(handover_hdr->f_BitMapStart);
- handover_hdr->f_BitMapStart = nullptr;
- }
- }
+ handover_hdr->f_BitMapStart = (VoidPtr)struct_ptr[kDefaultMemoryMap].VirtualStart; /* Start of bitmap. */
+ handover_hdr->f_BitMapSize = struct_ptr[kDefaultMemoryMap].NumberOfPages * sizeof(UIntPtr); /* Size of bitmap. */
handover_hdr->f_FirmwareCustomTables[0] = (VoidPtr)BS;
handover_hdr->f_FirmwareCustomTables[1] = (VoidPtr)ST;
@@ -224,6 +215,7 @@ EFI_EXTERN_C EFI_API Int32 Main(EfiHandlePtr image_handle,
{
syschk_thread = new Boot::BootThread(reader_syschk.Blob());
syschk_thread->SetName("BootZ: System Recovery Check");
+ syschk_thread->Start(handover_hdr, NO);
}
#ifndef __AHCI__
@@ -276,13 +268,11 @@ EFI_EXTERN_C EFI_API Int32 Main(EfiHandlePtr image_handle,
// Assign to global 'kHandoverHeader'.
- WideChar kernel_path[256U] = {0};
+ WideChar kernel_path[256U] = L"neoskrnl.exe";
UInt32 kernel_path_sz = 256U;
if (ST->RuntimeServices->GetVariable(L"/props/boot_path", kEfiGlobalNamespaceVarGUID, nullptr, &kernel_path_sz, kernel_path) != kEfiOk)
{
- CopyMem(kernel_path, L"neoskrnl.exe", 13);
-
UInt32 attr = 0x00000001 | 0x00000002 | 0x00000004;
ST->RuntimeServices->SetVariable(L"/props/boot_path", kEfiGlobalNamespaceVarGUID, &attr, &kernel_path_sz, kernel_path);
}
diff --git a/dev/Kernel/FirmwareKit/EFI/EFI.h b/dev/Kernel/FirmwareKit/EFI/EFI.h
index d6b20d5b..c0c341b7 100644
--- a/dev/Kernel/FirmwareKit/EFI/EFI.h
+++ b/dev/Kernel/FirmwareKit/EFI/EFI.h
@@ -221,7 +221,7 @@ typedef struct EfiMemoryDescriptor
///
EfiVirtualAddress VirtualStart;
///
- /// NumberOfPagesNumber of 4 KiB pages in the memory region.
+ /// NumberOfPages Number of 4 KiB pages in the memory region.
/// NumberOfPages must not be 0, and must not be any value
/// that would represent a memory page with a start address,
/// either physical or virtual, above 0xfffffffffffff000.
diff --git a/dev/Kernel/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cc b/dev/Kernel/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cc
index 35568399..bc4bd330 100644
--- a/dev/Kernel/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cc
+++ b/dev/Kernel/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cc
@@ -104,8 +104,6 @@ EXTERN_C void idt_handle_math(NeOS::UIntPtr rsp)
process.Leak().Crash();
}
-EXTERN BOOL kAHCICommandIssued;
-
/// @brief Handle any generic fault.
/// @param rsp
EXTERN_C void idt_handle_generic(NeOS::UIntPtr rsp)
diff --git a/dev/Kernel/HALKit/AMD64/Storage/AHCI.cc b/dev/Kernel/HALKit/AMD64/Storage/AHCI.cc
index bd751a2c..f2e0fda5 100644
--- a/dev/Kernel/HALKit/AMD64/Storage/AHCI.cc
+++ b/dev/Kernel/HALKit/AMD64/Storage/AHCI.cc
@@ -50,11 +50,11 @@
using namespace NeOS;
-STATIC PCI::Device kPCIDevice;
-STATIC HbaMem* kSATA[kSATAPortCnt] = {};
-STATIC SizeT kSATAIndex = 0UL;
-STATIC Lba kSATASectorCount = 0UL;
-
+STATIC PCI::Device kSATADev;
+STATIC HbaMem* kSATAHba;
+STATIC Lba kSATASectorCount = 0UL;
+STATIC UInt16 kSATAIndex = 0U;
+STATIC Char kCurrentDiskModel[50] = {"UNKNOWN AHCI DRIVE"};
STATIC UInt16 kSATAPortsImplemented = 0U;
BOOL kAHCICommandIssued = NO;
@@ -70,15 +70,23 @@ STATIC Void drv_compute_disk_ahci() noexcept
{
kSATASectorCount = 0UL;
- const UInt16 kSzIdent = 512U;
+ const UInt16 kSzIdent = kib_cast(1);
UInt8 identify_data[kSzIdent] = {0};
rt_set_memory(identify_data, 0, kSzIdent);
- drv_std_input_output<NO, YES, YES>(0, identify_data, 0, kSzIdent);
+ drv_std_input_output<NO, YES, YES>(0, identify_data, kAHCISectorSize, kSzIdent);
+
+ for (SizeT i = 0; i < 40; ++i)
+ {
+ kCurrentDiskModel[i * 2] = identify_data[27 + i * 2] >> 8;
+ kCurrentDiskModel[i * 2 + 1] = identify_data[27 + i * 2] & 0xFF;
+ }
+
+ kCurrentDiskModel[40] = '\0';
- kSATASectorCount = (identify_data[61] << 16) | identify_data[60];
+ kout << "Drive Model: " << kCurrentDiskModel << kendl;
kout << "Disk Size: " << number(drv_get_size()) << kendl;
kout << "Highest LBA: " << number(kSATASectorCount) << kendl;
@@ -104,12 +112,12 @@ STATIC Void drv_std_input_output(UInt64 lba, UInt8* buffer, SizeT sector_sz, Siz
{
UIntPtr slot = 0UL;
- slot = drv_find_cmd_slot(&kSATA[kSATAIndex]->Ports[kSATAIndex]);
+ slot = drv_find_cmd_slot(&kSATAHba->Ports[kSATAIndex]);
if (slot == ~0)
return;
- HbaCmdHeader* command_header = ((HbaCmdHeader*)((UInt64)kSATA[kSATAIndex]->Ports[kSATAIndex].Clb));
+ HbaCmdHeader* command_header = ((HbaCmdHeader*)((VoidPtr)((UInt64)kSATAHba->Ports[kSATAIndex].Clb)));
command_header += slot;
@@ -117,18 +125,28 @@ STATIC Void drv_std_input_output(UInt64 lba, UInt8* buffer, SizeT sector_sz, Siz
command_header->Cfl = sizeof(FisRegH2D) / sizeof(UInt32);
command_header->Write = Write;
- command_header->Prdtl = 1;
+ command_header->Prdtl = (UInt16)((size_buffer - 1) >> 4) + 1;
- HbaCmdTbl* command_table = (HbaCmdTbl*)((UInt64)command_header->Ctba);
+ HbaCmdTbl* command_table = (HbaCmdTbl*)((VoidPtr)((UInt64)command_header->Ctba));
+ rt_set_memory(command_table, 0, sizeof(HbaCmdTbl) + (command_header->Prdtl - 1) * sizeof(HbaPrdtEntry));
MUST_PASS(command_table);
UIntPtr buffer_phys = HAL::hal_get_phys_address(buffer);
- command_table->Prdt[0].Dba = ((UInt32)(UInt64)buffer_phys);
- command_table->Prdt[0].Dbau = (((UInt64)(buffer_phys) >> 32));
- command_table->Prdt[0].Dbc = ((size_buffer)-1);
- command_table->Prdt[0].Ie = YES;
+ Int32 i = 0;
+
+ for (; i < (command_header->Prdtl - 1); i++)
+ {
+ command_table->Prdt[i].Dba = ((UInt32)(UInt64)buffer_phys);
+ command_table->Prdt[i].Dbau = (((UInt64)(buffer_phys) >> 32));
+ command_table->Prdt[i].Dbc = ((size_buffer / command_header->Prdtl - 1) - 1);
+ command_table->Prdt[i].Ie = YES;
+ }
+
+ command_table->Prdt[i].Dba = ((UInt32)(UInt64)buffer_phys);
+ command_table->Prdt[i].Dbc = ((size_buffer / command_header->Prdtl - 1) - 1);
+ command_table->Prdt[i].Ie = YES;
FisRegH2D* h2d_fis = (FisRegH2D*)(&command_table->Cfis);
@@ -152,24 +170,21 @@ STATIC Void drv_std_input_output(UInt64 lba, UInt8* buffer, SizeT sector_sz, Siz
h2d_fis->CountLow = (size_buffer)&0xFF;
h2d_fis->CountHigh = (size_buffer >> 8) & 0xFF;
- while ((kSATA[kSATAIndex]->Ports[kSATAIndex].Tfd & (kSATASRBsy | kSATASRDrq)))
+ while ((kSATAHba->Ports[kSATAIndex].Tfd & (kSATASRBsy | kSATASRDrq)))
{
kout << "Waiting for TFD...\r";
}
- kSATA[kSATAIndex]->Ports[kSATAIndex].Ci = (1 << slot);
-
- kAHCICommandIssued = YES;
+ kSATAHba->Ports[kSATAIndex].Ci = (1 << slot);
- while (kSATA[kSATAIndex]->Ports[kSATAIndex].Ci & (1 << slot))
+ while (1)
{
- ;
+ if ((kSATAHba->Ports[kSATAIndex].Ci & (1 << slot)) == 0)
+ break;
}
- kAHCICommandIssued = NO;
-
- // check again.
- if (kSATA[kSATAIndex]->Is & kHBAErrTaskFile)
+ // Check IS again.
+ if (kSATAHba->Is & kHBAErrTaskFile)
{
ke_panic(RUNTIME_CHECK_BAD_BEHAVIOR, "AHCI Read disk failure, faulty component.");
}
@@ -201,15 +216,15 @@ STATIC Bool drv_std_init_ahci(UInt16& pi, BOOL atapi)
for (SizeT device_index = 0; device_index < NE_BUS_COUNT; ++device_index)
{
- kPCIDevice = iterator[device_index].Leak(); // Leak device.
+ kSATADev = iterator[device_index].Leak(); // Leak device.
- if (kPCIDevice.Subclass() == kSATASubClass &&
- kPCIDevice.ProgIf() == kSATAProgIfAHCI)
+ if (kSATADev.Subclass() == kSATASubClass &&
+ kSATADev.ProgIf() == kSATAProgIfAHCI)
{
- HbaMem* mem_ahci = (HbaMem*)kPCIDevice.Bar(kSATABar5);
+ HbaMem* mem_ahci = (HbaMem*)kSATADev.Bar(kSATABar5);
- kPCIDevice.EnableMmio((UInt32)(UIntPtr)mem_ahci); // Enable the memory index_byte/o for this ahci device.
- kPCIDevice.BecomeBusMaster((UInt32)(UIntPtr)mem_ahci); // Become bus master for this ahci device, so that we can control it.
+ kSATADev.BecomeBusMaster((UInt32)(UIntPtr)mem_ahci);
+ kSATADev.EnableMmio((UInt32)(UIntPtr)mem_ahci);
UInt32 ports_implemented = mem_ahci->Pi;
UInt16 ahci_index = 0;
@@ -217,10 +232,13 @@ STATIC Bool drv_std_init_ahci(UInt16& pi, BOOL atapi)
kSATAPortsImplemented = ports_implemented;
const UInt16 kMaxPortsImplemented = kSATAPortCnt;
- const UInt32 kSATASignature = atapi ? kSATAPISig : kSATASig;
+ const UInt32 kSATASignature = kSATASig;
+ const UInt32 kSATAPISignature = kSATAPISig;
const UInt8 kSATAPresent = 0x03;
const UInt8 kSATAIPMActive = 0x01;
+ kSATAHba = mem_ahci;
+
while (ports_implemented)
{
UInt8 ipm = (mem_ahci->Ports[ahci_index].Ssts >> 8) & 0x0F;
@@ -228,24 +246,30 @@ STATIC Bool drv_std_init_ahci(UInt16& pi, BOOL atapi)
if (mem_ahci->Ports[ahci_index].Sig == kSATASignature && det == kSATAPresent && ipm == kSATAIPMActive)
{
- kout << (atapi ? "Detect: /dev/atp" : "Detect: /dev/sat") << number(ahci_index) << kendl;
+ kout << "Detect: /dev/sat" << number(ahci_index) << kendl;
- kSATAIndex = ahci_index;
- kSATA[ahci_index] = mem_ahci;
+ kSATAIndex = ahci_index;
+ kSATAHba->Ports[ahci_index].Cmd |= kHBAPxCmdFre | kHBAPxCmdST;
- pi = ports_implemented;
+ break;
+ }
+ else if (atapi && kSATAPISignature == mem_ahci->Ports[ahci_index].Sig)
+ {
+ kout << "Detect: /dev/atp" << number(ahci_index) << kendl;
+
+ kSATAIndex = ahci_index;
+ kSATAHba->Ports[ahci_index].Cmd |= kHBAPxCmdFre | kHBAPxCmdST;
break;
}
ports_implemented >>= 1;
- ahci_index++;
+ ++ahci_index;
}
- if (ports_implemented > 0)
- {
- drv_compute_disk_ahci();
- }
+ drv_compute_disk_ahci();
+
+ pi = mem_ahci->Pi;
return YES;
}
@@ -256,7 +280,7 @@ STATIC Bool drv_std_init_ahci(UInt16& pi, BOOL atapi)
Bool drv_std_detected_ahci()
{
- return kPCIDevice.DeviceId() != (UShort)PCI::PciConfigKind::Invalid && kPCIDevice.Bar(kSATABar5) != 0;
+ return kSATADev.DeviceId() != (UShort)PCI::PciConfigKind::Invalid && kSATADev.Bar(kSATABar5) != 0;
}
UInt16 sk_init_ahci_device(BOOL atapi)
diff --git a/dev/Kernel/HALKit/AMD64/Storage/DMA.cc b/dev/Kernel/HALKit/AMD64/Storage/DMA.cc
index a51c31ba..109b55af 100644
--- a/dev/Kernel/HALKit/AMD64/Storage/DMA.cc
+++ b/dev/Kernel/HALKit/AMD64/Storage/DMA.cc
@@ -111,8 +111,8 @@ Boolean drv_std_init(UInt16 Bus, UInt8 Drive, UInt16& OutBus, UInt8& OutMaster)
for (SizeT i = 0; i < 40; i += 2)
{
- kCurrentDiskModel[i] = kATAData[27 + i] >> 8;
- kCurrentDiskModel[i + 1] = kATAData[27 + i] & 0xFF;
+ kCurrentDiskModel[i * 2] = kATAData[27 + i * 2] >> 8;
+ kCurrentDiskModel[i * 2 + 1] = kATAData[27 + i * 2] & 0xFF;
}
kCurrentDiskModel[40] = '\0';
diff --git a/dev/Kernel/NetworkKit/IPC.h b/dev/Kernel/NetworkKit/IPC.h
index 8ac1b63e..9047a8af 100644
--- a/dev/Kernel/NetworkKit/IPC.h
+++ b/dev/Kernel/NetworkKit/IPC.h
@@ -40,15 +40,13 @@ namespace NeOS
// some operators.
////////////////////////////////////
- bool operator==(const IPC_ADDR& addr) noexcept
- {
- return addr.UserProcessID == this->UserProcessID && addr.UserProcessTeam == this->UserProcessTeam;
- }
-
- bool operator==(IPC_ADDR& addr) noexcept
- {
- return addr.UserProcessID == this->UserProcessID && addr.UserProcessTeam == this->UserProcessTeam;
- }
+ bool operator==(const IPC_ADDR& addr) noexcept;
+
+ bool operator==(IPC_ADDR& addr) noexcept;
+
+ bool operator!=(const IPC_ADDR& addr) noexcept;
+
+ bool operator!=(IPC_ADDR& addr) noexcept;
};
typedef struct IPC_ADDR IPC_ADDR;
@@ -76,20 +74,7 @@ namespace NeOS
UInt8 IpcData[kIPCMsgSize];
/// @brief Passes the message to target, could be anything, HTTP packet, JSON or whatever.
- Bool Pass(IPC_MSG* target) noexcept
- {
- if (target && target->IpcFrom == this->IpcTo)
- {
- if (this->IpcMsgSz > target->IpcMsgSz)
- return No;
-
- rt_copy_memory(this->IpcData, target->IpcData, this->IpcMsgSz);
-
- return Yes;
- }
-
- return No;
- }
+ static Bool Pass(IPC_MSG* self, IPC_MSG* target) noexcept;
} PACKED IPC_MSG;
/// @brief Sanitize packet function
diff --git a/dev/Kernel/NetworkKit/MAC.h b/dev/Kernel/NetworkKit/MAC.h
index c7fc25b1..407dfd8d 100644
--- a/dev/Kernel/NetworkKit/MAC.h
+++ b/dev/Kernel/NetworkKit/MAC.h
@@ -21,11 +21,17 @@ namespace NeOS
class MacAddressGetter final
{
public:
- explicit MacAddressGetter() = default;
+ MacAddressGetter() = default;
+ ~MacAddressGetter() = default;
+
+ NE_COPY_DEFAULT(MacAddressGetter);
public:
- KString& AsString();
Array<WideChar, kMACAddrLen>& AsBytes();
+
+ private:
+ Array<WideChar, kMACAddrLen> fMacAddress;
+
};
} // namespace NeOS
diff --git a/dev/Kernel/src/ACPIFactoryInterface.cc b/dev/Kernel/src/ACPIFactoryInterface.cc
index 56f450ef..eaa97052 100644
--- a/dev/Kernel/src/ACPIFactoryInterface.cc
+++ b/dev/Kernel/src/ACPIFactoryInterface.cc
@@ -93,4 +93,9 @@ namespace NeOS
return chr == 0;
}
+
+ ErrorOr<voidPtr> ACPIFactoryInterface::operator[](const Char* signature)
+ {
+ return this->Find(signature);
+ }
} // namespace NeOS
diff --git a/dev/Kernel/src/FS/NeFS.cc b/dev/Kernel/src/FS/NeFS.cc
index 88f83020..45fc15fa 100644
--- a/dev/Kernel/src/FS/NeFS.cc
+++ b/dev/Kernel/src/FS/NeFS.cc
@@ -159,19 +159,19 @@ _Output BOOL NeFileSystemParser::CreateFork(_Input NEFS_FORK_STRUCT& the_fork)
}
/***********************************************************************************/
-/// @brief Find fork inside New filesystem.
+/// @brief Find fork inside filesystem.
/// @param catalog the catalog.
/// @param name the fork name.
-/// @return the fork.
+/// @return the newly found fork.
/***********************************************************************************/
_Output NEFS_FORK_STRUCT* NeFileSystemParser::FindFork(_Input NEFS_CATALOG_STRUCT* catalog,
_Input const Char* name,
- Boolean isDataFork)
+ _Input Boolean is_data)
{
auto& drive = kMountpoint.A();
NEFS_FORK_STRUCT* the_fork = nullptr;
- Lba lba = isDataFork ? catalog->DataFork : catalog->ResourceFork;
+ Lba lba = is_data ? catalog->DataFork : catalog->ResourceFork;
while (lba != 0)
{
diff --git a/dev/Kernel/src/Network/IPCAddr.cc b/dev/Kernel/src/Network/IPCAddr.cc
index 3acb2943..f18d9e42 100644
--- a/dev/Kernel/src/Network/IPCAddr.cc
+++ b/dev/Kernel/src/Network/IPCAddr.cc
@@ -10,5 +10,23 @@
namespace NeOS
{
+ bool IPC_ADDR::operator==(const IPC_ADDR& addr) noexcept
+ {
+ return addr.UserProcessID == this->UserProcessID && addr.UserProcessTeam == this->UserProcessTeam;
+ }
+ bool IPC_ADDR::operator==(IPC_ADDR& addr) noexcept
+ {
+ return addr.UserProcessID == this->UserProcessID && addr.UserProcessTeam == this->UserProcessTeam;
+ }
+
+ bool IPC_ADDR::operator!=(const IPC_ADDR& addr) noexcept
+ {
+ return addr.UserProcessID != this->UserProcessID || addr.UserProcessTeam != this->UserProcessTeam;
+ }
+
+ bool IPC_ADDR::operator!=(IPC_ADDR& addr) noexcept
+ {
+ return addr.UserProcessID != this->UserProcessID || addr.UserProcessTeam != this->UserProcessTeam;
+ }
}
diff --git a/dev/Kernel/src/Network/IPCMsg.cc b/dev/Kernel/src/Network/IPCMsg.cc
index 04f1114b..42bbd293 100644
--- a/dev/Kernel/src/Network/IPCMsg.cc
+++ b/dev/Kernel/src/Network/IPCMsg.cc
@@ -101,4 +101,19 @@ namespace NeOS
return No;
}
+
+ Bool IPC_MSG::Pass(IPC_MSG* self, IPC_MSG* target) noexcept
+ {
+ if (self && target && (target == self))
+ {
+ if (self->IpcMsgSz > target->IpcMsgSz)
+ return No;
+
+ rt_copy_memory(self->IpcData, target->IpcData, self->IpcMsgSz);
+
+ return Yes;
+ }
+
+ return No;
+ }
} // namespace NeOS
diff --git a/dev/Kernel/src/Network/MACAddressGetter.cc b/dev/Kernel/src/Network/MACAddressGetter.cc
new file mode 100644
index 00000000..47d3350f
--- /dev/null
+++ b/dev/Kernel/src/Network/MACAddressGetter.cc
@@ -0,0 +1,15 @@
+/* -------------------------------------------
+
+ Copyright (C) 2024-2025, Amlal EL Mahrouss, all rights reserved.
+
+------------------------------------------- */
+
+#include <NetworkKit/MAC.h>
+
+namespace NeOS
+{
+ Array<WideChar, kMACAddrLen>& MacAddressGetter::AsBytes()
+ {
+ return this->fMacAddress;
+ }
+} // namespace NeOS
diff --git a/dev/Kernel/src/Network/NetworkDevice.cc b/dev/Kernel/src/Network/NetworkDevice.cc
index 94d494da..f2971265 100644
--- a/dev/Kernel/src/Network/NetworkDevice.cc
+++ b/dev/Kernel/src/Network/NetworkDevice.cc
@@ -16,20 +16,20 @@ namespace NeOS
}
/// \brief Setter for fNetworkName.
- Boolean NetworkDevice::Name(const Char* strView)
+ Boolean NetworkDevice::Name(const Char* devnam)
{
- if (strView == nullptr)
- return false;
+ if (devnam == nullptr)
+ return NO;
- if (*strView == 0)
- return false;
+ if (*devnam == 0)
+ return NO;
- if (rt_string_len(strView) > cNetworkNameLen)
- return false;
+ if (rt_string_len(devnam) > cNetworkNameLen)
+ return NO;
- rt_copy_memory((VoidPtr)strView,
- (VoidPtr)this->fNetworkName, rt_string_len(strView));
+ rt_copy_memory((VoidPtr)devnam,
+ (VoidPtr)this->fNetworkName, rt_string_len(devnam));
- return true;
+ return YES;
}
} // namespace NeOS
diff --git a/dev/Mod/ACPI/ACPIFactoryInterface.h b/dev/Mod/ACPI/ACPIFactoryInterface.h
index eb8d7353..d398b2b7 100644
--- a/dev/Mod/ACPI/ACPIFactoryInterface.h
+++ b/dev/Mod/ACPI/ACPIFactoryInterface.h
@@ -21,7 +21,7 @@ namespace NeOS
typedef ACPIFactoryInterface PowerFactoryInterface;
- class ACPIFactoryInterface final : public PowerFactory
+ class ACPIFactoryInterface final NE_POWER_FACTORY
{
public:
explicit ACPIFactoryInterface(voidPtr rsp_ptr);
@@ -47,10 +47,7 @@ namespace NeOS
bool Checksum(const Char* checksum, SSizeT len); // watch for collides!
public:
- ErrorOr<voidPtr> operator[](const Char* signature)
- {
- return this->Find(signature);
- }
+ ErrorOr<voidPtr> operator[](const Char* signature);
private:
VoidPtr fRsdp{nullptr}; // pointer to root descriptor.
diff --git a/dev/Mod/AHCI/AHCI.h b/dev/Mod/AHCI/AHCI.h
index d729b456..11f2346a 100644
--- a/dev/Mod/AHCI/AHCI.h
+++ b/dev/Mod/AHCI/AHCI.h
@@ -283,10 +283,12 @@ typedef struct HbaCmdHeader final
NeOS::UInt8 Pmp : 4; // Port multiplier port
NeOS::UInt16 Prdtl; // Physical region descriptor table length in entries
- volatile NeOS::UInt32 Prdbc; // Physical region descriptor byte count transferred
+ NeOS::UInt32 Prdbc; // Physical region descriptor byte count transferred
NeOS::UInt32 Ctba; // Command table descriptor base address
NeOS::UInt32 Ctbau; // Command table descriptor base address upper 32 bits
+
+ NeOS::UInt32 Rscv[4];
} HbaCmdHeader;
typedef struct HbaFis final
diff --git a/dev/Mod/Pwr/PowerFactory.h b/dev/Mod/Pwr/PowerFactory.h
index 2992fac1..15548198 100644
--- a/dev/Mod/Pwr/PowerFactory.h
+++ b/dev/Mod/Pwr/PowerFactory.h
@@ -12,6 +12,8 @@
#include <NewKit/Defines.h>
#include <NewKit/Ref.h>
+#define NE_POWER_FACTORY : public PowerFactory
+
namespace NeOS
{
class PowerFactory;