diff options
| author | Amlal El Mahrouss <amlal.elmahrouss@icloud.com> | 2025-03-11 08:10:55 +0100 |
|---|---|---|
| committer | Amlal El Mahrouss <amlal.elmahrouss@icloud.com> | 2025-03-11 08:10:55 +0100 |
| commit | 0a2760d8a5ce09ae77cfc097ece4100579164f9d (patch) | |
| tree | 38be73d31c13aa0ac3a7883dfd22cc2b8208dbb9 /dev | |
| parent | c6d9cc48540b380583fc2bb8fcfe59a9113d0e19 (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.json | 3 | ||||
| -rw-r--r-- | dev/Boot/amd64-desktop.make | 17 | ||||
| -rw-r--r-- | dev/Boot/src/HEL/AMD64/BootEFI.cc | 18 | ||||
| -rw-r--r-- | dev/Kernel/FirmwareKit/EFI/EFI.h | 2 | ||||
| -rw-r--r-- | dev/Kernel/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cc | 2 | ||||
| -rw-r--r-- | dev/Kernel/HALKit/AMD64/Storage/AHCI.cc | 110 | ||||
| -rw-r--r-- | dev/Kernel/HALKit/AMD64/Storage/DMA.cc | 4 | ||||
| -rw-r--r-- | dev/Kernel/NetworkKit/IPC.h | 31 | ||||
| -rw-r--r-- | dev/Kernel/NetworkKit/MAC.h | 10 | ||||
| -rw-r--r-- | dev/Kernel/src/ACPIFactoryInterface.cc | 5 | ||||
| -rw-r--r-- | dev/Kernel/src/FS/NeFS.cc | 8 | ||||
| -rw-r--r-- | dev/Kernel/src/Network/IPCAddr.cc | 18 | ||||
| -rw-r--r-- | dev/Kernel/src/Network/IPCMsg.cc | 15 | ||||
| -rw-r--r-- | dev/Kernel/src/Network/MACAddressGetter.cc | 15 | ||||
| -rw-r--r-- | dev/Kernel/src/Network/NetworkDevice.cc | 20 | ||||
| -rw-r--r-- | dev/Mod/ACPI/ACPIFactoryInterface.h | 7 | ||||
| -rw-r--r-- | dev/Mod/AHCI/AHCI.h | 4 | ||||
| -rw-r--r-- | dev/Mod/Pwr/PowerFactory.h | 2 |
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; |
