diff options
Diffstat (limited to 'dev')
28 files changed, 243 insertions, 208 deletions
diff --git a/dev/Boot/BootKit/BootKit.h b/dev/Boot/BootKit/BootKit.h index 2d39265a..0460ed00 100644 --- a/dev/Boot/BootKit/BootKit.h +++ b/dev/Boot/BootKit/BootKit.h @@ -377,7 +377,7 @@ namespace Boot epm_boot.FsVersion = kNeFSVersionInteger; epm_boot.LbaStart = kNeFSRootCatalogStartAddress; - epm_boot.LbaEnd = fDiskDev.GetDiskSize(); + epm_boot.LbaEnd = fDiskDev.GetDiskSize(); epm_boot.SectorSz = part.SectorSize; epm_boot.Kind = kEPMZkaOS; epm_boot.NumBlocks = part.CatalogCount; diff --git a/dev/Boot/Mod/NetBoot/NetBoot.h b/dev/Boot/Mod/NetBoot/NetBoot.h index 00f15aad..284ea5d5 100644 --- a/dev/Boot/Mod/NetBoot/NetBoot.h +++ b/dev/Boot/Mod/NetBoot/NetBoot.h @@ -11,7 +11,7 @@ #include <NewKit/Defines.h> -#define kNetBootINetMagic "NETB" +#define kNetBootINetMagic "NETB" #define kNetBootINetMagicLength 4 /// @brief the internet header is used to download updates OTA. @@ -26,6 +26,6 @@ typedef struct NetBootInternetHeader Kernel::Int32 PatchLength; /// the patch length. Kernel::Char PatchTarget[255]; /// the target file. Kernel::Boolean ImpliesROM; /// does it imply an EEPROM reprogram? - Kernel::Boolean Preflight; /// is it a preflight packet. - Kernel::Char Data[]; /// non preflight packet has a patch blob for a **PatchTarget** + Kernel::Boolean Preflight; /// is it a preflight packet. + Kernel::Char Data[]; /// non preflight packet has a patch blob for a **PatchTarget** } NetBootInternetHeader; diff --git a/dev/Boot/src/BootThread.cc b/dev/Boot/src/BootThread.cc index cf58e26e..cd3f0bac 100644 --- a/dev/Boot/src/BootThread.cc +++ b/dev/Boot/src/BootThread.cc @@ -191,7 +191,7 @@ namespace Boot { if (fStack) delete[] fStack; - + fStack = nullptr; return reinterpret_cast<HEL::HandoverProc>(fStartAddress)(fHandover); diff --git a/dev/Boot/src/HEL/ARM64/EFIBootStartup.cc b/dev/Boot/src/HEL/ARM64/EFIBootStartup.cc index 179e582b..5c02f7f8 100644 --- a/dev/Boot/src/HEL/ARM64/EFIBootStartup.cc +++ b/dev/Boot/src/HEL/ARM64/EFIBootStartup.cc @@ -203,16 +203,16 @@ EFI_EXTERN_C EFI_API Int32 Main(EfiHandlePtr image_handle, // ------------------------------------------ // // If we succeed in reading the blob, then execute it. // ------------------------------------------ // - + if (reader_kernel.Blob()) { auto kernel_thread = Boot::BootThread(reader_kernel.Blob()); kernel_thread.SetName("BootZ: MicroKernel."); handover_hdr->f_KernelImage = reader_kernel.Blob(); - + EFI::ExitBootServices(map_key, image_handle); - + kernel_thread.Start(handover_hdr, YES); } diff --git a/dev/Kernel/FSKit/NeFS.h b/dev/Kernel/FSKit/NeFS.h index 63f73059..ba782d79 100644 --- a/dev/Kernel/FSKit/NeFS.h +++ b/dev/Kernel/FSKit/NeFS.h @@ -142,7 +142,7 @@ enum /// @brief Catalog type. struct PACKED NFS_CATALOG_STRUCT final { - BOOL ForkOrCatalog : 1{0}; + BOOL ForkOrCatalog : 1 {0}; Kernel::Char Name[kNeFSNodeNameLen] = {0}; Kernel::Char Mime[kNeFSMimeNameLen] = {0}; @@ -179,7 +179,7 @@ struct PACKED NFS_CATALOG_STRUCT final /// whereas the data fork is reserved for file data. struct PACKED NFS_FORK_STRUCT final { - BOOL ForkOrCatalog : 1{1}; + BOOL ForkOrCatalog : 1 {1}; Kernel::Char ForkName[kNeFSForkNameLen] = {0}; Kernel::Char CatalogName[kNeFSNodeNameLen] = {0}; @@ -269,7 +269,7 @@ namespace Kernel /// @param catalog it's catalog /// @param theFork the fork itself. /// @return the fork - _Output BOOL CreateFork(_Input const Char* catalog, + _Output BOOL CreateFork(_Input NFS_CATALOG_STRUCT* catalog, _Input NFS_FORK_STRUCT& theFork); /// @brief Find fork inside New filesystem. @@ -404,7 +404,8 @@ namespace Kernel Char* xml_data, Char* journal_name) { - if (!parser) + if (!parser || + !mNode) return NO; NFS_FORK_STRUCT new_fork{}; @@ -418,7 +419,7 @@ namespace Kernel new_fork.DataSize = rt_string_len(xml_data); new_fork.Kind = kNeFSRsrcForkKind; - if (!parser->CreateFork(mStamp, new_fork)) + if (!parser->CreateFork(mNode, new_fork)) return NO; kcout << "XML Commited: " << xml_data << "\r\nTo Journal Fork: " << journal_name << endl; @@ -429,13 +430,13 @@ namespace Kernel } private: - Char mStamp[255] = {"/system/journal" kNeFSJournalExt}; + Char mStamp[255] = {"/sys/journal" kNeFSJournalExt}; }; namespace NeFS { Boolean fs_init_nefs(Void) noexcept; - } // namespace Detail + } // namespace NeFS } // namespace Kernel /// @brief Write to newfs disk. @@ -444,8 +445,8 @@ namespace Kernel /// @param drv_indx drive index. /// @return status code. Kernel::Int32 fs_nefs_write(Kernel::MountpointInterface* drv_mnt, - Kernel::DriveTrait& drv_trait, - Kernel::Int32 drv_indx); + Kernel::DriveTrait& drv_trait, + Kernel::Int32 drv_indx); /// @brief Read from newfs disk. /// @param drv_mnt mounted interface. @@ -453,5 +454,5 @@ Kernel::Int32 fs_nefs_write(Kernel::MountpointInterface* drv_mnt, /// @param drv_indx drive index. /// @return status code. Kernel::Int32 fs_nefs_read(Kernel::MountpointInterface* drv_mnt, - Kernel::DriveTrait& drv_trait, - Kernel::Int32 drv_indx); + Kernel::DriveTrait& drv_trait, + Kernel::Int32 drv_indx); diff --git a/dev/Kernel/FirmwareKit/CoreBoot/NetBoot.h b/dev/Kernel/FirmwareKit/CoreBoot/NetBoot.h index a1880c8b..ed0d26b8 100644 --- a/dev/Kernel/FirmwareKit/CoreBoot/NetBoot.h +++ b/dev/Kernel/FirmwareKit/CoreBoot/NetBoot.h @@ -20,6 +20,6 @@ typedef struct NetBootInternetHeader Kernel::Int32 PatchLength; /// the patch length. Kernel::Char PatchTarget[255]; /// the target file. Kernel::Boolean ImpliesROM; /// does it imply an EEPROM reprogram? - Kernel::Boolean Preflight; /// is it a preflight packet. - Kernel::Char Patch[]; /// non preflight packet has a patch blob for a **PatchTarget** + Kernel::Boolean Preflight; /// is it a preflight packet. + Kernel::Char Patch[]; /// non preflight packet has a patch blob for a **PatchTarget** } NetBootInternetHeader; diff --git a/dev/Kernel/FirmwareKit/EFI/NS.h b/dev/Kernel/FirmwareKit/EFI/NS.h index c253c801..6b37be5b 100644 --- a/dev/Kernel/FirmwareKit/EFI/NS.h +++ b/dev/Kernel/FirmwareKit/EFI/NS.h @@ -12,9 +12,9 @@ namespace Firmware::Detail::EFI { using namespace Kernel; -EXTERN_C -{ + EXTERN_C + { #include <FirmwareKit/EFI/EFI.h> -} + } } // namespace Firmware::Detail::EFI diff --git a/dev/Kernel/HALKit/AMD64/HalApplicationProcessor.cc b/dev/Kernel/HALKit/AMD64/HalApplicationProcessor.cc index c09ceaa8..9400dbb0 100644 --- a/dev/Kernel/HALKit/AMD64/HalApplicationProcessor.cc +++ b/dev/Kernel/HALKit/AMD64/HalApplicationProcessor.cc @@ -223,7 +223,7 @@ namespace Kernel::HAL constexpr auto kMemoryAPStart = 0x7C000; Char* ptr_ap_code = reinterpret_cast<Char*>(kMemoryAPStart); - + SizeT hal_ap_blob_len = hal_ap_blob_end - hal_ap_blob_start; rt_copy_memory((Char*)hal_ap_blob_start, ptr_ap_code, hal_ap_blob_len); diff --git a/dev/Kernel/HALKit/AMD64/HalDescriptorLoader.cc b/dev/Kernel/HALKit/AMD64/HalDescriptorLoader.cc index 8624bd06..21cbef12 100644 --- a/dev/Kernel/HALKit/AMD64/HalDescriptorLoader.cc +++ b/dev/Kernel/HALKit/AMD64/HalDescriptorLoader.cc @@ -28,8 +28,8 @@ namespace Kernel::HAL UInt16 kPITCommDivisor = kPITFrequency / ticks; // 100 Hz. - HAL::rt_out8(kPITControlPort, 0x36); // Command to PIT - HAL::rt_out8(kPITChannel0Port, kPITCommDivisor & 0xFF); // Send low byte + HAL::rt_out8(kPITControlPort, 0x36); // Command to PIT + HAL::rt_out8(kPITChannel0Port, kPITCommDivisor & 0xFF); // Send low byte HAL::rt_out8(kPITChannel0Port, (kPITCommDivisor >> 8) & 0xFF); // Send high byte hal_clear_irq_mask(32); diff --git a/dev/Kernel/HALKit/AMD64/HalKernelMain.cc b/dev/Kernel/HALKit/AMD64/HalKernelMain.cc index c8875c84..7be102e7 100644 --- a/dev/Kernel/HALKit/AMD64/HalKernelMain.cc +++ b/dev/Kernel/HALKit/AMD64/HalKernelMain.cc @@ -96,7 +96,7 @@ EXTERN_C Kernel::Void hal_real_init(Kernel::Void) noexcept Kernel::HAL::mp_get_cores(kHandoverHeader->f_HardwareTables.f_VendorPtr); Kernel::HAL::Register64 idt_reg; - + idt_reg.Base = (Kernel::UIntPtr)kInterruptVectorTable; Kernel::HAL::IDTLoader idt_loader; diff --git a/dev/Kernel/HALKit/AMD64/Processor.h b/dev/Kernel/HALKit/AMD64/Processor.h index 31a6d2c5..8709dc30 100644 --- a/dev/Kernel/HALKit/AMD64/Processor.h +++ b/dev/Kernel/HALKit/AMD64/Processor.h @@ -177,7 +177,7 @@ namespace Kernel::HAL static Void Load(Register64& idt); static Void Load(Ref<Register64>& idt); }; - + /***********************************************************************************/ /// @brief Is the current config SMP aware? /// @return True if YES, False if not. diff --git a/dev/Kernel/HALKit/AMD64/Storage/SATA-DMA.cc b/dev/Kernel/HALKit/AMD64/Storage/SATA-DMA.cc index 3148da2a..8336dbd0 100644 --- a/dev/Kernel/HALKit/AMD64/Storage/SATA-DMA.cc +++ b/dev/Kernel/HALKit/AMD64/Storage/SATA-DMA.cc @@ -26,11 +26,11 @@ #ifdef __AHCI__ -#define kHBAErrTaskFile (1 << 30) -#define kHBAPxCmdST 0x0001 -#define kHBAPxCmdFre 0x0010 -#define kHBAPxCmdFR 0x4000 -#define kHBAPxCmdCR 0x8000 +#define kHBAErrTaskFile (1 << 30) +#define kHBAPxCmdST 0x0001 +#define kHBAPxCmdFre 0x0010 +#define kHBAPxCmdFR 0x4000 +#define kHBAPxCmdCR 0x8000 #define kSataLBAMode (1 << 6) @@ -135,7 +135,7 @@ Kernel::Boolean drv_std_init(Kernel::UInt16& PortsImplemented) const auto kAHCIBaseAddress = mib_cast(4); - kSATAPort->Ports[kSATAPortIdx].Clb = kAHCIBaseAddress + (kSATAPortIdx << 10); + kSATAPort->Ports[kSATAPortIdx].Clb = kAHCIBaseAddress + (kSATAPortIdx << 10); kSATAPort->Ports[kSATAPortIdx].Clbu = 0; rt_set_memory((VoidPtr)((UIntPtr)kSATAPort->Ports[kSATAPortIdx].Clb), 0, 1024); diff --git a/dev/Kernel/HALKit/ARM64/HalApplicationProcessor.cc b/dev/Kernel/HALKit/ARM64/HalApplicationProcessor.cc index cee17735..1114fc00 100644 --- a/dev/Kernel/HALKit/ARM64/HalApplicationProcessor.cc +++ b/dev/Kernel/HALKit/ARM64/HalApplicationProcessor.cc @@ -56,7 +56,7 @@ namespace Kernel const auto kEnableSignalInt = YES;
- gicc_ctlr |= kEnableSignalInt; // Enable signaling of interrupts
+ gicc_ctlr |= kEnableSignalInt; // Enable signaling of interrupts
gicc_ctlr |= (kEnableSignalInt << 1); // Allow Group 1 interrupts in EL0
HAL::hal_mmio_write(GICC_BASE + GICC_CTLR, gicc_ctlr);
diff --git a/dev/Kernel/HALKit/ARM64/HalKernelMain.cc b/dev/Kernel/HALKit/ARM64/HalKernelMain.cc index 7f6ffc61..83967ce7 100644 --- a/dev/Kernel/HALKit/ARM64/HalKernelMain.cc +++ b/dev/Kernel/HALKit/ARM64/HalKernelMain.cc @@ -18,7 +18,6 @@ #include <HALKit/ARM64/Processor.h> #include <CFKit/Property.h> - EXTERN_C void hal_init_platform( Kernel::HEL::BootInfoHeader* handover_hdr) { diff --git a/dev/Kernel/KernelKit/DriveMgr.h b/dev/Kernel/KernelKit/DriveMgr.h index b508b562..d2765840 100644 --- a/dev/Kernel/KernelKit/DriveMgr.h +++ b/dev/Kernel/KernelKit/DriveMgr.h @@ -49,22 +49,22 @@ namespace Kernel /// @brief Media drive trait type. struct DriveTrait final { - Char fName[kDriveNameLen]; // /System, /Boot, //./Devices/USB... - Int32 fKind; // fMassStorage, fFloppy, fOpticalDisc. - Int32 fFlags; // fReadOnly, fXPMDrive, fXPTDrive + Char fName[kDriveNameLen]; // /System, /Boot, //./Devices/USB... + Int32 fKind; // fMassStorage, fFloppy, fOpticalDisc. + Int32 fFlags; // fReadOnly, fXPMDrive, fXPTDrive UInt64 fLbaEnd{0}; UInt64 fLbaStart{0}; UInt64 fSectorSz{512}; /// @brief Packet drive (StorageKit compilant.) struct DrivePacket final { - VoidPtr fPacketContent{nullptr}; //! packet body. - Char fPacketMime[kDriveNameLen] = "*/*"; //! identify what we're sending. - SizeT fPacketSize{0UL}; //! packet size - UInt32 fPacketCRC32{0UL}; //! sanity crc, in case if good is set to false - Boolean fPacketGood{YES}; - Lba fPacketLba{0UL}; - Boolean fPacketReadOnly{NO}; + VoidPtr fPacketContent{nullptr}; //! packet body. + Char fPacketMime[kDriveNameLen] = "*/*"; //! identify what we're sending. + SizeT fPacketSize{0UL}; //! packet size + UInt32 fPacketCRC32{0UL}; //! sanity crc, in case if good is set to false + Boolean fPacketGood{YES}; + Lba fPacketLba{0UL}; + Boolean fPacketReadOnly{NO}; DriveTrait* fPacketDrive{nullptr}; } fPacket; diff --git a/dev/Kernel/KernelKit/IPEFDylibObject.h b/dev/Kernel/KernelKit/IPEFDylibObject.h index a88a761c..d3b7a68e 100644 --- a/dev/Kernel/KernelKit/IPEFDylibObject.h +++ b/dev/Kernel/KernelKit/IPEFDylibObject.h @@ -26,7 +26,7 @@ namespace Kernel { public: explicit IPEFDylibObject() = default; - ~IPEFDylibObject() = default; + ~IPEFDylibObject() = default; public: ZKA_COPY_DEFAULT(IPEFDylibObject); @@ -100,7 +100,7 @@ namespace Kernel typedef IPEFDylibObject* IDylib; EXTERN_C IDylib rtl_init_dylib(UserProcess& header); - EXTERN_C Void rtl_fini_dylib(UserProcess& header, IDylib lib, Bool* successful); + EXTERN_C Void rtl_fini_dylib(UserProcess& header, IDylib lib, Bool* successful); } // namespace Kernel #endif /* ifndef __KERNELKIT_SHARED_OBJECT_H__ */ diff --git a/dev/Kernel/KernelKit/User.h b/dev/Kernel/KernelKit/User.h index c68e064b..dfd952e2 100644 --- a/dev/Kernel/KernelKit/User.h +++ b/dev/Kernel/KernelKit/User.h @@ -16,7 +16,7 @@ ///! all are used to make authorization operations on the OS. #define kSuperUser "OS AUTHORITY/SUPER/%s" #define kGuestUser "OS AUTHORITY/GUEST/%s" -#define kFmtUser "OS AUTHORITY/STD/%s" +#define kFmtUser "OS AUTHORITY/STD/%s" #define kUsersDir "/usr/" @@ -78,7 +78,7 @@ namespace Kernel private: UserRingKind mUserRing{UserRingKind::kRingStdUser}; - Char mUserName[kMaxUserNameLen] = {0}; + Char mUserName[kMaxUserNameLen] = {0}; Char mUserKey[kMaxUserTokenLen] = {0}; }; } // namespace Kernel diff --git a/dev/Kernel/KernelKit/UserProcessScheduler.h b/dev/Kernel/KernelKit/UserProcessScheduler.h index 987cfb3f..060426c7 100644 --- a/dev/Kernel/KernelKit/UserProcessScheduler.h +++ b/dev/Kernel/KernelKit/UserProcessScheduler.h @@ -163,7 +163,7 @@ namespace Kernel UInt8* StackReserve{nullptr}; UserProcessImage Image{}; SizeT StackSize{kSchedMaxStackSz}; - IDylibObject* DylibDelegate{nullptr}; + IDylibObject* DylibDelegate{nullptr}; SizeT MemoryCursor{0UL}; SizeT MemoryLimit{kSchedMaxMemoryLimit}; SizeT UsedMemory{0UL}; @@ -262,14 +262,14 @@ namespace Kernel ZKA_COPY_DEFAULT(UserProcessTeam); Array<UserProcess, kSchedProcessLimitPerTeam>& AsArray(); - Ref<UserProcess>& AsRef(); - ProcessID& Id() noexcept; + Ref<UserProcess>& AsRef(); + ProcessID& Id() noexcept; public: Array<UserProcess, kSchedProcessLimitPerTeam> mProcessList; - Ref<UserProcess> mCurrentProcess; - ProcessID mTeamId{0}; - ProcessID mProcessCount{0}; + Ref<UserProcess> mCurrentProcess; + ProcessID mTeamId{0}; + ProcessID mProcessCount{0}; }; typedef Array<UserProcess, kSchedProcessLimitPerTeam> UserThreadArray; @@ -304,7 +304,7 @@ namespace Kernel public: Ref<UserProcess>& GetCurrentProcess(); - const SizeT Run() noexcept; + const SizeT Run() noexcept; public: STATIC UserProcessScheduler& The(); diff --git a/dev/Kernel/src/DriveMgr.cc b/dev/Kernel/src/DriveMgr.cc index effa7b90..c1ae8c0f 100644 --- a/dev/Kernel/src/DriveMgr.cc +++ b/dev/Kernel/src/DriveMgr.cc @@ -47,8 +47,6 @@ namespace Kernel } } - kcout << pckt->fPacketMime << endl; - #ifdef __AHCI__ drv_std_read(pckt->fPacketLba, (Char*)pckt->fPacketContent, pckt->fPacketDrive->fSectorSz, pckt->fPacketSize); #elif defined(__ATA_PIO__) || defined(__ATA_DMA__) @@ -87,8 +85,6 @@ namespace Kernel } } - kcout << pckt->fPacketMime << endl; - #ifdef __AHCI__ drv_std_write(pckt->fPacketLba, (Char*)pckt->fPacketContent, pckt->fPacketDrive->fSectorSz, pckt->fPacketSize); #elif defined(__ATA_PIO__) || defined(__ATA_DMA__) diff --git a/dev/Kernel/src/FS/NeFS.cc b/dev/Kernel/src/FS/NeFS.cc index 19a4047a..0dad44f8 100644 --- a/dev/Kernel/src/FS/NeFS.cc +++ b/dev/Kernel/src/FS/NeFS.cc @@ -52,7 +52,7 @@ Kernel::SizeT drv_get_size(); /// /Path1/readme.rtf /***********************************************************************************/ -STATIC MountpointInterface kDiskMountpoint; +STATIC MountpointInterface kMountpoint; /***********************************************************************************/ /// @brief Creates a new fork inside the New filesystem partition. @@ -60,76 +60,104 @@ STATIC MountpointInterface kDiskMountpoint; /// @param the_fork the fork itself. /// @return the fork /***********************************************************************************/ -_Output BOOL NeFileSystemParser::CreateFork(_Input const Char* catalog_name, +_Output BOOL NeFileSystemParser::CreateFork(_Input NFS_CATALOG_STRUCT* catalog, _Input NFS_FORK_STRUCT& the_fork) { - if (the_fork.DataSize > 0) + if (catalog && the_fork.ForkName[0] != 0 && + the_fork.DataSize > 0) { - auto catalog = this->GetCatalog(catalog_name); - - if (!catalog) - return NO; - Lba lba = (the_fork.Kind == kNeFSDataForkKind) ? catalog->DataFork : catalog->ResourceFork; - auto drv = kDiskMountpoint.A(); + kcout << "Fork lba: " << hex_number(lba) << endl; + + if (lba < kNeFSCatalogStartAddress) + return NO; - NFS_FORK_STRUCT cur_fork{}; + auto drv = kMountpoint.A(); - Lba lba_prev_fork = lba; - Lba lba_next_fork = lba; + /// special treatment. + rt_copy_memory((VoidPtr) "fs/nefs-packet", drv.fPacket.fPacketMime, + rt_string_len("fs/nefs-packet")); - if (the_fork.Kind == kNeFSDataForkKind) - catalog->DataForkSize += the_fork.DataSize; - else - catalog->ResourceForkSize += the_fork.DataSize; + NFS_FORK_STRUCT curFork{0}; + NFS_FORK_STRUCT prevFork{0}; + Lba lbaOfPreviousFork = lba; /// do not check for anything. Loop until we get what we want, that is a free fork zone. - do + while (YES) { - drv.fPacket.fPacketLba = lba_next_fork; + drv.fPacket.fPacketLba = lba; drv.fPacket.fPacketSize = sizeof(NFS_FORK_STRUCT); - drv.fPacket.fPacketContent = &cur_fork; + drv.fPacket.fPacketContent = &curFork; drv.fInput(&drv.fPacket); - kcout << "LBA: " << hex_number(lba_next_fork) << endl; + if (curFork.NextSibling > kBadAddress) + { + kcout << "Bad fork: " << hex_number(curFork.NextSibling) << endl; + return NO; + } - if (cur_fork.Flags & kNeFSFlagCreated) + kcout << "Next fork: " << hex_number(curFork.NextSibling) << endl; + + if (curFork.Flags & kNeFSFlagCreated) { + kcout << "Fork already exists.\r"; + /// sanity check. - if (StringBuilder::Equals(cur_fork.ForkName, the_fork.ForkName) && - StringBuilder::Equals(cur_fork.CatalogName, the_fork.CatalogName)) - { - kcout << "Fork already exists.\r"; + if (StringBuilder::Equals(curFork.ForkName, the_fork.ForkName) && + StringBuilder::Equals(curFork.CatalogName, catalog->Name)) return NO; - } - lba_next_fork = cur_fork.NextSibling; + kcout << "Next fork: " << hex_number(curFork.NextSibling) << endl; + + lbaOfPreviousFork = lba; + lba = curFork.NextSibling; + + prevFork = curFork; } else { - the_fork.Flags |= kNeFSFlagCreated; - the_fork.DataOffset = lba - sizeof(NFS_FORK_STRUCT); - the_fork.NextSibling = the_fork.DataOffset - the_fork.DataSize; - the_fork.PreviousSibling = lba_prev_fork; + /// This is a check that we have, in order to link the previous fork + /// entry. + if (lba >= kNeFSCatalogStartAddress) + { + drv.fPacket.fPacketLba = lbaOfPreviousFork; + drv.fPacket.fPacketSize = sizeof(NFS_FORK_STRUCT); + drv.fPacket.fPacketContent = &prevFork; - drv.fPacket.fPacketLba = lba; - drv.fPacket.fPacketSize = sizeof(NFS_FORK_STRUCT); - drv.fPacket.fPacketContent = &the_fork; + prevFork.NextSibling = lba; - /// log what we have now. - kcout << "Wrote fork data at: " << hex_number(the_fork.DataOffset) - << endl; + /// write to disk. + drv.fOutput(&drv.fPacket); + } - kcout << "Wrote fork at: " << hex_number(lba) << endl; + break; + } + } - drv.fOutput(&drv.fPacket); + constexpr auto kForkPadding = + 4; /// this value gives us space for the data offset. - return YES; - } - } while (drv.fPacket.fPacketGood); + the_fork.Flags |= kNeFSFlagCreated; + the_fork.DataOffset = lba - sizeof(NFS_FORK_STRUCT); + the_fork.PreviousSibling = lbaOfPreviousFork; + the_fork.NextSibling = (the_fork.DataOffset - the_fork.DataSize - sizeof(NFS_FORK_STRUCT)) * kForkPadding; + + drv.fPacket.fPacketLba = lba; + drv.fPacket.fPacketSize = sizeof(NFS_FORK_STRUCT); + drv.fPacket.fPacketContent = &the_fork; + + drv.fOutput(&drv.fPacket); + + /// log what we have now. + kcout << "Wrote fork data at: " << hex_number(the_fork.DataOffset) + << endl; + + kcout << "Wrote fork at: " << hex_number(lba) << endl; + + return YES; } return NO; @@ -145,21 +173,21 @@ _Output NFS_FORK_STRUCT* NeFileSystemParser::FindFork(_Input NFS_CATALOG_STRUCT* _Input const Char* name, Boolean isDataFork) { - auto drv = kDiskMountpoint.A(); + auto drive = kMountpoint.A(); NFS_FORK_STRUCT* the_fork = nullptr; Lba lba = isDataFork ? catalog->DataFork : catalog->ResourceFork; while (lba != 0) { - drv.fPacket.fPacketLba = lba; - drv.fPacket.fPacketSize = sizeof(NFS_FORK_STRUCT); - drv.fPacket.fPacketContent = (VoidPtr)the_fork; + drive.fPacket.fPacketLba = lba; + drive.fPacket.fPacketSize = sizeof(NFS_FORK_STRUCT); + drive.fPacket.fPacketContent = (VoidPtr)the_fork; - rt_copy_memory((VoidPtr) "fs/nefs-packet", drv.fPacket.fPacketMime, 16); + rt_copy_memory((VoidPtr) "fs/nefs-packet", drive.fPacket.fPacketMime, 16); if (auto res = - fs_nefs_read(&kDiskMountpoint, drv, this->mDriveIndex); + fs_nefs_read(&kMountpoint, drive, this->mDriveIndex); res) { switch (res) @@ -278,7 +306,9 @@ _Output NFS_CATALOG_STRUCT* NeFileSystemParser::CreateCatalog(_Input const Char* NFS_CATALOG_STRUCT* catalog = this->FindCatalog(parent_name, out_lba); - auto drive = kDiskMountpoint.A(); + auto drive = kMountpoint.A(); + + constexpr auto kNeFSCatalogPadding = 4; if (catalog && catalog->Kind == kNeFSCatalogKindFile) { @@ -287,19 +317,27 @@ _Output NFS_CATALOG_STRUCT* NeFileSystemParser::CreateCatalog(_Input const Char* return nullptr; } + else if (!catalog) + { + Char part_block[sizeof(NFS_ROOT_PARTITION_BLOCK)] = {0}; - constexpr SizeT kDefaultForkSize = 0UL; + drive.fPacket.fPacketContent = part_block; + drive.fPacket.fPacketSize = sizeof(NFS_ROOT_PARTITION_BLOCK); + drive.fPacket.fPacketLba = kNeFSRootCatalogStartAddress; + + drive.fInput(&drive.fPacket); - if (!out_lba) - out_lba = kNeFSCatalogStartAddress; + NFS_ROOT_PARTITION_BLOCK* blk_nefs = (NFS_ROOT_PARTITION_BLOCK*)part_block; + out_lba = blk_nefs->StartCatalog; + } NFS_CATALOG_STRUCT* child_catalog = new NFS_CATALOG_STRUCT(); - child_catalog->ResourceForkSize = kDefaultForkSize; - child_catalog->DataForkSize = kDefaultForkSize; + child_catalog->ResourceForkSize = 0UL; + child_catalog->DataForkSize = 0UL; child_catalog->CatalogFlags = kNeFSStatusUnlocked; - child_catalog->NextSibling = out_lba + sizeof(NFS_CATALOG_STRUCT); - child_catalog->PrevSibling = out_lba - sizeof(NFS_CATALOG_STRUCT); + child_catalog->NextSibling = out_lba; + child_catalog->PrevSibling = out_lba; child_catalog->Kind = kind; child_catalog->Flags |= kNeFSFlagCreated; child_catalog->CatalogFlags = flags; @@ -314,12 +352,6 @@ _Output NFS_CATALOG_STRUCT* NeFileSystemParser::CreateCatalog(_Input const Char* rt_copy_memory((VoidPtr) "fs/nefs-packet", drive.fPacket.fPacketMime, rt_string_len("fs/nefs-packet")); - drive.fPacket.fPacketContent = &temporary_catalog; - drive.fPacket.fPacketSize = sizeof(NFS_CATALOG_STRUCT); - drive.fPacket.fPacketLba = start_free; - - drive.fInput(&drive.fPacket); - Char buf_part_block[sizeof(NFS_ROOT_PARTITION_BLOCK)] = {0}; drive.fPacket.fPacketContent = buf_part_block; @@ -338,13 +370,28 @@ _Output NFS_CATALOG_STRUCT* NeFileSystemParser::CreateCatalog(_Input const Char* return nullptr; } - while (start_free >= kNeFSCatalogStartAddress) + drive.fPacket.fPacketContent = &temporary_catalog; + drive.fPacket.fPacketSize = sizeof(NFS_CATALOG_STRUCT); + drive.fPacket.fPacketLba = start_free; + + drive.fInput(&drive.fPacket); + + while (start_free >= part_block->StartCatalog) { // ========================== // // Allocate catalog now... // ========================== // if ((temporary_catalog.Flags & kNeFSFlagCreated) == 0) { + child_catalog->NextSibling = + start_free + (sizeof(NFS_CATALOG_STRUCT) * kNeFSCatalogPadding); + + drive.fPacket.fPacketContent = &temporary_catalog; + drive.fPacket.fPacketSize = sizeof(NFS_CATALOG_STRUCT); + drive.fPacket.fPacketLba = start_free; + + drive.fOutput(&drive.fPacket); + child_catalog->DataFork = part_block->DiskSize - start_free; child_catalog->ResourceFork = child_catalog->DataFork; @@ -357,7 +404,7 @@ _Output NFS_CATALOG_STRUCT* NeFileSystemParser::CreateCatalog(_Input const Char* // Get NeFS partition's block. drive.fPacket.fPacketContent = buf_part_block; - drive.fPacket.fPacketSize = kNeFSSectorSz; + drive.fPacket.fPacketSize = sizeof(NFS_ROOT_PARTITION_BLOCK); drive.fPacket.fPacketLba = kNeFSRootCatalogStartAddress; drive.fInput(&drive.fPacket); @@ -389,7 +436,7 @@ _Output NFS_CATALOG_STRUCT* NeFileSystemParser::CreateCatalog(_Input const Char* return child_catalog; } - start_free = start_free + (sizeof(NFS_CATALOG_STRUCT) * 4); + start_free = start_free + (sizeof(NFS_CATALOG_STRUCT) * kNeFSCatalogPadding); drive.fPacket.fPacketContent = &temporary_catalog; drive.fPacket.fPacketSize = sizeof(NFS_CATALOG_STRUCT); @@ -583,7 +630,7 @@ bool NeFileSystemParser::WriteCatalog(_Input _Output NFS_CATALOG_STRUCT* catalog rt_copy_memory(data, buf, size_of_data); - auto drive = kDiskMountpoint.A(); + auto drive = kMountpoint.A(); rt_copy_memory((VoidPtr) "fs/nefs-packet", drive.fPacket.fPacketMime, rt_string_len("fs/nefs-packet")); @@ -669,81 +716,75 @@ _Output NFS_CATALOG_STRUCT* NeFileSystemParser::FindCatalog(_Input const Char* c *catalog_name == 0) return nullptr; - kcout << "Start finding catalog: " << catalog_name << "\r"; - - NFS_ROOT_PARTITION_BLOCK fs_buf{0}; - auto drive = kDiskMountpoint.A(); + NFS_ROOT_PARTITION_BLOCK part{0}; + auto& drive = kMountpoint.A(); rt_copy_memory((VoidPtr) "fs/nefs-packet", drive.fPacket.fPacketMime, rt_string_len("fs/nefs-packet")); - drive.fPacket.fPacketContent = &fs_buf; + drive.fPacket.fPacketContent = ∂ drive.fPacket.fPacketSize = sizeof(NFS_ROOT_PARTITION_BLOCK); drive.fPacket.fPacketLba = kNeFSRootCatalogStartAddress; drive.fInput(&drive.fPacket); - NFS_ROOT_PARTITION_BLOCK* part = (NFS_ROOT_PARTITION_BLOCK*)&fs_buf; - - auto start_catalog_lba = part->StartCatalog; + auto start_catalog_lba = kNeFSCatalogStartAddress; const auto kStartCatalogList = start_catalog_lba; - auto local_search_first = false; - - NFS_CATALOG_STRUCT temporary_catalog{0}; - - drive.fPacket.fPacketLba = start_catalog_lba; - drive.fPacket.fPacketContent = &temporary_catalog; - drive.fPacket.fPacketSize = sizeof(NFS_CATALOG_STRUCT); - - drive.fInput(&drive.fPacket); - - if (!StringBuilder::Equals(catalog_name, NeFileSystemHelper::Root()) && !local_search) + if (!StringBuilder::Equals(catalog_name, NeFileSystemHelper::Root()) && local_search) { Char parent_name[kNeFSNodeNameLen] = {0}; - for (SizeT index_fill = 0; index_fill < rt_string_len(catalog_name); ++index_fill) + for (SizeT indexFill = 0; indexFill < rt_string_len(catalog_name); ++indexFill) { - parent_name[index_fill] = catalog_name[index_fill]; + parent_name[indexFill] = catalog_name[indexFill]; } - SizeT index_reverse_copy = rt_string_len(parent_name); + SizeT indexReverseCopy = rt_string_len(parent_name); // zero character. - parent_name[--index_reverse_copy] = 0; + parent_name[--indexReverseCopy] = 0; // mandatory '/' character. - parent_name[--index_reverse_copy] = 0; + parent_name[--indexReverseCopy] = 0; - while (parent_name[index_reverse_copy] != NeFileSystemHelper::Separator()) + while (parent_name[indexReverseCopy] != NeFileSystemHelper::Separator()) { - parent_name[index_reverse_copy] = 0; - --index_reverse_copy; + parent_name[indexReverseCopy] = 0; + --indexReverseCopy; } - NFS_CATALOG_STRUCT* parent_catalog = this->FindCatalog(parent_name, out_lba, YES); + NFS_CATALOG_STRUCT* parent_catalog = this->FindCatalog(parent_name, out_lba); if (parent_catalog && !StringBuilder::Equals(parent_name, NeFileSystemHelper::Root())) { start_catalog_lba = parent_catalog->NextSibling; - delete parent_catalog; + delete parent_catalog; parent_catalog = nullptr; - local_search_first = true; + local_search = YES; } else if (parent_catalog) { + start_catalog_lba = parent_catalog->NextSibling; + + local_search = YES; + delete parent_catalog; parent_catalog = nullptr; } + else if (!parent_catalog) + { + return nullptr; + } } - kcout << "Finding catalog...\r"; + NFS_CATALOG_STRUCT temporary_catalog{}; kNeFSSearchThroughCatalogList: - while (drive.fPacket.fPacketGood) + while (YES) { drive.fPacket.fPacketLba = start_catalog_lba; drive.fPacket.fPacketContent = &temporary_catalog; @@ -751,6 +792,8 @@ kNeFSSearchThroughCatalogList: drive.fInput(&drive.fPacket); + kcout << temporary_catalog.Name << endl; + if (StringBuilder::Equals(catalog_name, temporary_catalog.Name)) { if (temporary_catalog.Status == kNeFSStatusLocked && @@ -758,8 +801,7 @@ kNeFSSearchThroughCatalogList: { err_global_get() = kErrorFileLocked; - out_lba = 0UL; - return nullptr; + goto NeFSContinueSearch; } /// ignore unallocated catalog, break @@ -767,8 +809,7 @@ kNeFSSearchThroughCatalogList: { err_global_get() = kErrorFileNotFound; - out_lba = 0UL; - return nullptr; + goto NeFSContinueSearch; } kcout << "Found available catalog at: " << hex_number(start_catalog_lba) << endl; @@ -784,14 +825,14 @@ kNeFSSearchThroughCatalogList: NeFSContinueSearch: start_catalog_lba = temporary_catalog.NextSibling; - if (start_catalog_lba <= kNeFSRootCatalogStartAddress) + if (start_catalog_lba < part.StartCatalog) break; } - if (local_search_first) + if (local_search) { - local_search_first = false; - start_catalog_lba = kStartCatalogList; + local_search = false; + start_catalog_lba = part.StartCatalog; goto kNeFSSearchThroughCatalogList; } @@ -847,7 +888,7 @@ Boolean NeFileSystemParser::RemoveCatalog(_Input const Char* catalog_name) catalog->Flags &= (~kNeFSFlagCreated); catalog->Flags |= kNeFSFlagDeleted; - auto drive = kDiskMountpoint.A(); + auto drive = kMountpoint.A(); rt_copy_memory((VoidPtr) "fs/nefs-packet", drive.fPacket.fPacketMime, rt_string_len("fs/nefs-packet")); @@ -913,7 +954,7 @@ VoidPtr NeFileSystemParser::ReadCatalog(_Input _Output NFS_CATALOG_STRUCT* catal << ", fork: " << hex_number(dataForkLba) << endl; NFS_FORK_STRUCT* fs_buf = new NFS_FORK_STRUCT(); - auto drive = kDiskMountpoint.A(); + auto drive = kMountpoint.A(); rt_copy_memory((VoidPtr) "fs/nefs-packet", drive.fPacket.fPacketMime, rt_string_len("fs/nefs-packet")); @@ -995,13 +1036,13 @@ namespace Kernel::NeFS { kcout << "Creating A:\r"; - kDiskMountpoint.A() = io_construct_main_drive(); - kDiskMountpoint.A().fPacket.fPacketDrive = &kDiskMountpoint.A(); + kMountpoint.A() = io_construct_main_drive(); + kMountpoint.A().fPacket.fPacketDrive = &kMountpoint.A(); kcout << "Creating A: [ OK ]\r"; return true; } -} // namespace Kernel::Detail +} // namespace Kernel::NeFS -#endif // ifdef __FSKIT_INCLUDES_NEFS__
\ No newline at end of file +#endif // ifdef __FSKIT_INCLUDES_NEFS__ diff --git a/dev/Kernel/src/KernelMain.cc b/dev/Kernel/src/KernelMain.cc index 1663d2e8..ad991161 100644 --- a/dev/Kernel/src/KernelMain.cc +++ b/dev/Kernel/src/KernelMain.cc @@ -72,7 +72,7 @@ namespace Kernel::Detail if (!mJournal.GetJournal(mNeFS)) mJournal.CreateJournal(mNeFS); - mJournal.CommitJournal(mNeFS, "<LOG_XML>Format Filesystem NeFS for ZkaOS.</LOG_XML>", "NeFS Format System"); + mJournal.CommitJournal(mNeFS, "<LOG_XML><FS>NeFS</FS></LOG_XML>", "NeFS Format System"); mJournal.ReleaseJournal(); } } diff --git a/dev/Kernel/src/UserProcessScheduler.cc b/dev/Kernel/src/UserProcessScheduler.cc index 47af66cb..d38b8143 100644 --- a/dev/Kernel/src/UserProcessScheduler.cc +++ b/dev/Kernel/src/UserProcessScheduler.cc @@ -36,7 +36,7 @@ namespace Kernel STATIC UserProcessScheduler kProcessScheduler; - UserProcess::UserProcess() = default; + UserProcess::UserProcess() = default; UserProcess::~UserProcess() = default; /// @brief Gets the last exit code. @@ -330,15 +330,13 @@ namespace Kernel #endif // __ZKA_VIRTUAL_MEMORY_SUPPORT__ // React according to process kind. - switch (process.Kind) - { - case UserProcess::kExectuableDylibKind: + switch (process.Kind) { + case UserProcess::kExectuableDylibKind: { process.DylibDelegate = rtl_init_dylib(process); MUST_PASS(process.DylibDelegate); } - default: - { + default: { kcout << "Unknown process kind: " << number(process.Kind) << endl; break; } diff --git a/dev/LibSCI/Macros.h b/dev/LibSCI/Macros.h index 2029b5d1..7d2f7467 100644 --- a/dev/LibSCI/Macros.h +++ b/dev/LibSCI/Macros.h @@ -18,8 +18,8 @@ Purpose: LibSCI Macros header. #define ATTRIBUTE(X) __attribute__((X)) -#define IMPORT_CXX extern "C++" -#define IMPORT_C extern "C" +#define IMPORT_CXX extern "C++" +#define IMPORT_C extern "C" #define DEPRECATED ATTRIBUTE(deprecated) diff --git a/dev/LibSCI/SCI.h b/dev/LibSCI/SCI.h index a50b0901..cf4c941b 100644 --- a/dev/LibSCI/SCI.h +++ b/dev/LibSCI/SCI.h @@ -255,11 +255,11 @@ IMPORT_C VoidPtr EvtDispatchEvent(_Input const Char* event_name, _Input VoidPtr enum
{
- kPowerCodeShutdown,
- kPowerCodeReboot,
- kPowerCodeSleep,
- kPowerCodeWake,
- kPowerCodeCount,
+ kPowerCodeShutdown,
+ kPowerCodeReboot,
+ kPowerCodeSleep,
+ kPowerCodeWake,
+ kPowerCodeCount,
};
IMPORT_C SInt32 PwrReadCode(_Output SInt32& code);
diff --git a/dev/Mod/ACPI/ACPIFactoryInterface.h b/dev/Mod/ACPI/ACPIFactoryInterface.h index 30a09fd7..bf248168 100644 --- a/dev/Mod/ACPI/ACPIFactoryInterface.h +++ b/dev/Mod/ACPI/ACPIFactoryInterface.h @@ -51,9 +51,9 @@ namespace Kernel } private: - VoidPtr fRsdp{nullptr}; // pointer to root descriptor. - SSizeT fEntries{0UL}; // number of entries, -1 tells that no invalid entries were - // found. + VoidPtr fRsdp{nullptr}; // pointer to root descriptor. + SSizeT fEntries{0UL}; // number of entries, -1 tells that no invalid entries were + // found. }; } // namespace Kernel diff --git a/dev/Mod/CoreGfx/AccessibilityMgr.h b/dev/Mod/CoreGfx/AccessibilityMgr.h index f0439a03..68c86030 100644 --- a/dev/Mod/CoreGfx/AccessibilityMgr.h +++ b/dev/Mod/CoreGfx/AccessibilityMgr.h @@ -36,6 +36,6 @@ namespace FB return kHandoverHeader->f_GOP.f_Height; } }; -} // namespace UI +} // namespace FB #endif // !GFX_MGR_ACCESSIBILITY_H_ diff --git a/dev/Mod/CoreGfx/FBMgr.h b/dev/Mod/CoreGfx/FBMgr.h index 2eaba448..828e236b 100644 --- a/dev/Mod/CoreGfx/FBMgr.h +++ b/dev/Mod/CoreGfx/FBMgr.h @@ -114,19 +114,19 @@ } #else #define FBDrawBitMapInRegionA(reg_ptr, height, width, base_x, base_y) -#define FBDrawBitMapInRegion(reg_ptr, height, width, base_x, base_y) -#define FBDrawBitMapInRegionToRgn(_Rgn, reg_ptr, height, width, base_x, base_y) -#define CGClearRegion(height, width, base_x, base_y) -#define FBDrawInRegion(_Clr, height, width, base_x, base_y) -#define FBDrawInRegionToRgn(_Rgn, _Clr, height, width, base_x, base_y) -#define FBDrawInRegionA(_Clr, height, width, base_x, base_y) -#define FBDrawBitMapInRegionA(reg_ptr, height, width, base_x, base_y) -#define FBDrawBitMapInRegion(reg_ptr, height, width, base_x, base_y) -#define FBDrawBitMapInRegionToRgn(_Rgn, reg_ptr, height, width, base_x, base_y) -#define CGClearRegion(height, width, base_x, base_y) -#define FBDrawInRegion(_Clr, height, width, base_x, base_y) -#define FBDrawInRegionToRgn(_Rgn, _Clr, height, width, base_x, base_y) -#define FBDrawInRegionA(_Clr, height, width, base_x, base_y) +#define FBDrawBitMapInRegion(reg_ptr, height, width, base_x, base_y) +#define FBDrawBitMapInRegionToRgn(_Rgn, reg_ptr, height, width, base_x, base_y) +#define CGClearRegion(height, width, base_x, base_y) +#define FBDrawInRegion(_Clr, height, width, base_x, base_y) +#define FBDrawInRegionToRgn(_Rgn, _Clr, height, width, base_x, base_y) +#define FBDrawInRegionA(_Clr, height, width, base_x, base_y) +#define FBDrawBitMapInRegionA(reg_ptr, height, width, base_x, base_y) +#define FBDrawBitMapInRegion(reg_ptr, height, width, base_x, base_y) +#define FBDrawBitMapInRegionToRgn(_Rgn, reg_ptr, height, width, base_x, base_y) +#define CGClearRegion(height, width, base_x, base_y) +#define FBDrawInRegion(_Clr, height, width, base_x, base_y) +#define FBDrawInRegionToRgn(_Rgn, _Clr, height, width, base_x, base_y) +#define FBDrawInRegionA(_Clr, height, width, base_x, base_y) #endif // __ZKA_AMD64__ #ifndef GFX_MGR_ACCESSIBILITY_H @@ -147,4 +147,4 @@ namespace FB fb_clear(); } -} // namespace UI
\ No newline at end of file +} // namespace FB
\ No newline at end of file diff --git a/dev/Mod/CoreGfx/TextMgr.h b/dev/Mod/CoreGfx/TextMgr.h index 718bf1bb..b97cfde4 100644 --- a/dev/Mod/CoreGfx/TextMgr.h +++ b/dev/Mod/CoreGfx/TextMgr.h @@ -9,8 +9,8 @@ #include <NewKit/Defines.h>
#include <Mod/CoreGfx/FBMgr.h>
-#define kFontSizeX 8
-#define kFontSizeY 8
+#define kFontSizeX 8
+#define kFontSizeY 8
#define kFontNOFChars 128
inline const Kernel::UInt8 kFontBitmap[kFontNOFChars][kFontSizeX] = {
|
