diff options
| author | Amlal El Mahrouss <amlal.elmahrouss@icloud.com> | 2024-10-20 17:53:37 +0200 |
|---|---|---|
| committer | Amlal El Mahrouss <amlal.elmahrouss@icloud.com> | 2024-10-20 17:53:37 +0200 |
| commit | 7764e88cd0032cd57fdc17a2906db9d8af9999e1 (patch) | |
| tree | a373ed0682c3161ee38b77089bc8fab821304a6b /dev/zka/src | |
| parent | 22e85ecdb17888268d32997b20e01cc98968cc3d (diff) | |
IMP: New implementations and improvements.
- Heap class allocation have been fixed.
- Scheduler allocation has been fixed.
- A new better flow for the kernel has been designed.
Signed-off-by: Amlal El Mahrouss <amlal.elmahrouss@icloud.com>
Diffstat (limited to 'dev/zka/src')
| -rw-r--r-- | dev/zka/src/CxxAbi-AMD64.cxx | 2 | ||||
| -rw-r--r-- | dev/zka/src/CxxAbi-ARM64.cxx | 4 | ||||
| -rw-r--r-- | dev/zka/src/DriveMgr.cxx | 10 | ||||
| -rw-r--r-- | dev/zka/src/FS/NeFS.cxx | 20 | ||||
| -rw-r--r-- | dev/zka/src/Stop.cxx | 2 | ||||
| -rw-r--r-- | dev/zka/src/Storage/SCSIDeviceInterface.cxx | 2 | ||||
| -rw-r--r-- | dev/zka/src/UserProcessScheduler.cxx | 29 |
7 files changed, 41 insertions, 28 deletions
diff --git a/dev/zka/src/CxxAbi-AMD64.cxx b/dev/zka/src/CxxAbi-AMD64.cxx index 87801eb8..32e3ff37 100644 --- a/dev/zka/src/CxxAbi-AMD64.cxx +++ b/dev/zka/src/CxxAbi-AMD64.cxx @@ -25,8 +25,6 @@ EXTERN_C Kernel::Void __cxa_pure_virtual(void* self) EXTERN_C void ___chkstk_ms(void) { - kcout << "Stack pointer has grown too much.\r"; - Kernel::ke_stop(RUNTIME_CHECK_FAILED); } EXTERN_C int atexit(void (*f)(void*), void* arg, void* dso) diff --git a/dev/zka/src/CxxAbi-ARM64.cxx b/dev/zka/src/CxxAbi-ARM64.cxx index 34c3f09c..759c2a7f 100644 --- a/dev/zka/src/CxxAbi-ARM64.cxx +++ b/dev/zka/src/CxxAbi-ARM64.cxx @@ -17,7 +17,9 @@ uarch_t __atexit_func_count; /// @brief Dynamic Shared Object Handle. Kernel::UIntPtr __dso_handle; -EXTERN_C void __chkstk(void) {} +EXTERN_C void __chkstk(void) +{ +} EXTERN_C int atexit(void (*f)(void*), void* arg, void* dso) { diff --git a/dev/zka/src/DriveMgr.cxx b/dev/zka/src/DriveMgr.cxx index eabe8978..ecec5cec 100644 --- a/dev/zka/src/DriveMgr.cxx +++ b/dev/zka/src/DriveMgr.cxx @@ -23,7 +23,7 @@ namespace Kernel STATIC UInt8 kATAMaster = 0U; /// @brief reads from an ATA drive. - /// @param pckt + /// @param pckt Packet structure (fPacketContent must be non null) /// @return Void io_drv_input(DriveTrait::DrivePacket* pckt) { @@ -33,9 +33,9 @@ namespace Kernel } #ifdef __AHCI__ - drv_std_read(pckt->fLba, (Char*)pckt->fPacketContent, kAHCISectorSize, pckt->fPacketSize); + drv_std_read(pckt->fLba, (Char*)pckt->fPacketContent.Leak(), kAHCISectorSize, pckt->fPacketSize); #elif defined(__ATA_PIO__) || defined(__ATA_DMA__) - drv_std_read(pckt->fLba, kATAIO, kATAMaster, (Char*)pckt->fPacketContent, kATASectorSize, pckt->fPacketSize); + drv_std_read(pckt->fLba, kATAIO, kATAMaster, (Char*)pckt->fPacketContent.Leak(), kATASectorSize, pckt->fPacketSize); #endif } @@ -50,9 +50,9 @@ namespace Kernel } #ifdef __AHCI__ - drv_std_write(pckt->fLba, (Char*)pckt->fPacketContent, kAHCISectorSize, pckt->fPacketSize); + drv_std_write(pckt->fLba, (Char*)pckt->fPacketContent.Leak(), kAHCISectorSize, pckt->fPacketSize); #elif defined(__ATA_PIO__) || defined(__ATA_DMA__) - drv_std_write(pckt->fLba, kATAIO, kATAMaster, (Char*)pckt->fPacketContent, kATASectorSize, pckt->fPacketSize); + drv_std_write(pckt->fLba, kATAIO, kATAMaster, (Char*)pckt->fPacketContent.Leak(), kATASectorSize, pckt->fPacketSize); #endif } diff --git a/dev/zka/src/FS/NeFS.cxx b/dev/zka/src/FS/NeFS.cxx index f1b60c70..48bd441f 100644 --- a/dev/zka/src/FS/NeFS.cxx +++ b/dev/zka/src/FS/NeFS.cxx @@ -327,7 +327,7 @@ _Output NFS_CATALOG_STRUCT* NeFSParser::CreateCatalog(_Input const Char* name, constexpr auto cNeFSCatalogPadding = 4; NFS_ROOT_PARTITION_BLOCK* part_block = (NFS_ROOT_PARTITION_BLOCK*)sectorBufPartBlock; - out_lba = part_block->StartCatalog; + out_lba = part_block->StartCatalog; } constexpr SizeT cDefaultForkSize = kNeFSForkSize; @@ -337,12 +337,12 @@ _Output NFS_CATALOG_STRUCT* NeFSParser::CreateCatalog(_Input const Char* name, Int32 flagsList = flags; child_catalog->ResourceForkSize = cDefaultForkSize; - child_catalog->DataForkSize = cDefaultForkSize; + child_catalog->DataForkSize = cDefaultForkSize; child_catalog->NextSibling = out_lba; child_catalog->PrevSibling = out_lba; - child_catalog->Kind = kind; - child_catalog->Flags = kNeFSFlagCreated | flagsList; + child_catalog->Kind = kind; + child_catalog->Flags = kNeFSFlagCreated | flagsList; rt_copy_memory((VoidPtr)name, (VoidPtr)child_catalog->Name, rt_string_len(name)); @@ -404,7 +404,7 @@ _Output NFS_CATALOG_STRUCT* NeFSParser::CreateCatalog(_Input const Char* name, return nullptr; } - child_catalog->DataFork = part_block->DiskSize - start_free; + child_catalog->DataFork = part_block->DiskSize - start_free; child_catalog->ResourceFork = child_catalog->DataFork; // Write the new catalog next sibling, if we don't know this parent. // @@ -587,13 +587,13 @@ bool NeFSParser::Format(_Input _Output DriveTrait* drive, _Input const Lba endLb SizeT sectorCount = drv_get_sector_count(); SizeT diskSize = drv_get_size(); - part_block->Kind = kNeFSPartitionTypeStandard; + part_block->Kind = kNeFSPartitionTypeStandard; part_block->StartCatalog = kNeFSCatalogStartAddress; - part_block->Flags = kNeFSPartitionTypeStandard; + part_block->Flags = kNeFSPartitionTypeStandard; part_block->CatalogCount = sectorCount / sizeof(NFS_CATALOG_STRUCT); - part_block->SectorCount = sectorCount; - part_block->DiskSize = diskSize; - part_block->FreeCatalog = sectorCount / sizeof(NFS_CATALOG_STRUCT); + part_block->SectorCount = sectorCount; + part_block->DiskSize = diskSize; + part_block->FreeCatalog = sectorCount / sizeof(NFS_CATALOG_STRUCT); drive->fPacket.fPacketContent = fs_buf; drive->fPacket.fPacketSize = kNeFSSectorSz; diff --git a/dev/zka/src/Stop.cxx b/dev/zka/src/Stop.cxx index 1992fc38..afbc223b 100644 --- a/dev/zka/src/Stop.cxx +++ b/dev/zka/src/Stop.cxx @@ -15,7 +15,7 @@ #include <modules/FB/FB.hxx> #include <modules/FB/Text.hxx> -#define cWebsiteMacro "https://help.zka-technologies.com/" +#define cWebsiteMacro "https://help.zws.com/" /* Each error code is attributed with an ID, which will prompt a string onto the * screen. Wait for debugger... */ diff --git a/dev/zka/src/Storage/SCSIDeviceInterface.cxx b/dev/zka/src/Storage/SCSIDeviceInterface.cxx index c228ae54..bda16961 100644 --- a/dev/zka/src/Storage/SCSIDeviceInterface.cxx +++ b/dev/zka/src/Storage/SCSIDeviceInterface.cxx @@ -8,4 +8,4 @@ ///! @brief ATAPI SCSI packet. const scsi_packet_type<12> kCDRomPacketTemplate = {0x43, 0, 1, 0, 0, 0, - 0, 12, 0x40, 0, 0}; + 0, 12, 0x40, 0, 0}; diff --git a/dev/zka/src/UserProcessScheduler.cxx b/dev/zka/src/UserProcessScheduler.cxx index d0236578..af9ab5d3 100644 --- a/dev/zka/src/UserProcessScheduler.cxx +++ b/dev/zka/src/UserProcessScheduler.cxx @@ -35,10 +35,12 @@ namespace Kernel STATIC UInt32 cLastExitCode = 0U; /***********************************************************************************/ - /// @brief User Process scheduler global object. + /// @brief User Process scheduler global and external reference of thread scheduler. /***********************************************************************************/ UserProcessScheduler* cProcessScheduler = nullptr; + EXTERN HardwareThreadScheduler* cHardwareThreadScheduler; + /// @brief Gets the last exit code. /// @note Not thread-safe. @@ -54,8 +56,15 @@ namespace Kernel Void UserProcess::Crash() { - if (*this->Name != 0) - kcout << this->Name << ": crashed, error id: " << number(kErrorProcessFault) << endl; + if (*this->Name != 0 && + *this->Name > 'A') +{ + kcout << this->Name << ": crashed, error id: " << number(kErrorProcessFault) << endl; +} + else + { + return; + } this->Exit(kErrorProcessFault); } @@ -505,11 +514,15 @@ namespace Kernel { if (!cProcessScheduler) { - cProcessScheduler = mm_new_class<UserProcessScheduler>(); - return Yes; + cProcessScheduler = new UserProcessScheduler(); } + + if (!cHardwareThreadScheduler) + { + cHardwareThreadScheduler = new HardwareThreadScheduler(); + } - return No; + return Yes; } /***********************************************************************************/ @@ -520,12 +533,12 @@ namespace Kernel SizeT UserProcessHelper::StartScheduling() { - kcout << "Sched: Trying to schedule processes...\r"; + kcout << "UserProcessScheduler: Trying to schedule user processes...\r"; if (!cProcessScheduler) return 0; - kcout << "Sched: Scheduling processes...\r"; + kcout << "UserProcessScheduler: Object is valid, scheduling user processes...\r"; SizeT ret = cProcessScheduler->Run(); return ret; |
