diff options
| author | Amlal El Mahrouss <amlal@nekernel.org> | 2025-04-11 17:52:52 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-04-11 17:52:52 +0200 |
| commit | c1d9fbd3925d6e10919a7793fc214c9f1a01b2ab (patch) | |
| tree | a74bdf6f87d07a24496effbc157f74d379d25007 /dev/kernel/HALKit | |
| parent | 8988b6f166d1087615b21229df651e0bcc0fa048 (diff) | |
| parent | c3856eddb5a8146751dac82ad1ba4433f5ca6d6d (diff) | |
Merge pull request #14 from amlel-el-mahrouss/dev
tweak kernel, boot: use -Wall, -Werror, -Wpedantic now
Diffstat (limited to 'dev/kernel/HALKit')
| -rw-r--r-- | dev/kernel/HALKit/AMD64/HalACPIFactoryInterface.cc | 2 | ||||
| -rw-r--r-- | dev/kernel/HALKit/AMD64/HalApplicationProcessor.cc | 7 | ||||
| -rw-r--r-- | dev/kernel/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cc | 46 | ||||
| -rw-r--r-- | dev/kernel/HALKit/AMD64/HalDebugOutput.cc | 10 | ||||
| -rw-r--r-- | dev/kernel/HALKit/AMD64/HalDescriptorLoader.cc | 41 | ||||
| -rw-r--r-- | dev/kernel/HALKit/AMD64/HalKernelMain.cc | 4 | ||||
| -rw-r--r-- | dev/kernel/HALKit/AMD64/HalKernelPanic.cc | 17 | ||||
| -rw-r--r-- | dev/kernel/HALKit/AMD64/HalPagingMgrAMD64.cc | 90 | ||||
| -rw-r--r-- | dev/kernel/HALKit/AMD64/HalSchedulerCorePrimitivesAMD64.cc | 3 | ||||
| -rw-r--r-- | dev/kernel/HALKit/AMD64/HalTimerAMD64.cc | 2 | ||||
| -rw-r--r-- | dev/kernel/HALKit/AMD64/PCI/DMA.cc | 10 | ||||
| -rw-r--r-- | dev/kernel/HALKit/AMD64/Paging.h | 29 | ||||
| -rw-r--r-- | dev/kernel/HALKit/AMD64/Processor.h | 11 | ||||
| -rw-r--r-- | dev/kernel/HALKit/AMD64/Storage/AHCI+Generic.cc | 19 | ||||
| -rw-r--r-- | dev/kernel/HALKit/AMD64/Storage/PIO+Generic.cc | 5 | ||||
| -rw-r--r-- | dev/kernel/HALKit/ARM64/HalApplicationProcessor.cc | 2 | ||||
| -rw-r--r-- | dev/kernel/HALKit/ARM64/HalKernelPanic.cc | 4 |
17 files changed, 148 insertions, 154 deletions
diff --git a/dev/kernel/HALKit/AMD64/HalACPIFactoryInterface.cc b/dev/kernel/HALKit/AMD64/HalACPIFactoryInterface.cc index 711fc78a..2430da07 100644 --- a/dev/kernel/HALKit/AMD64/HalACPIFactoryInterface.cc +++ b/dev/kernel/HALKit/AMD64/HalACPIFactoryInterface.cc @@ -89,7 +89,6 @@ namespace Kernel Bool ACPIFactoryInterface::Shutdown() { - failed_to_shutdown: return NO; } @@ -97,7 +96,6 @@ namespace Kernel /// @return nothing it's a reboot. Void ACPIFactoryInterface::Reboot() { - failed_to_reboot: asm volatile(".intel_syntax noprefix; " "rt_reset_hardware:; " "cli; " diff --git a/dev/kernel/HALKit/AMD64/HalApplicationProcessor.cc b/dev/kernel/HALKit/AMD64/HalApplicationProcessor.cc index c7e639e4..43888f3b 100644 --- a/dev/kernel/HALKit/AMD64/HalApplicationProcessor.cc +++ b/dev/kernel/HALKit/AMD64/HalApplicationProcessor.cc @@ -103,7 +103,7 @@ namespace Kernel::HAL UInt32 AcpiID; } LApic; }; - } List[]; // Records List + } List[1]; // Records List }; /////////////////////////////////////////////////////////////////////////////////////// @@ -215,7 +215,6 @@ namespace Kernel::HAL kSMPInterrupt = 0; kSMPCount = 0; - UInt32 eax, edx; kout << "SMP: Starting APs...\r"; kApicBaseAddress = kMADTBlock->Address; @@ -242,7 +241,7 @@ namespace Kernel::HAL break; kAPICLocales[kSMPCount] = kMADTBlock->List[kSMPCount].LAPIC.ProcessorID; - kout << "SMP: APIC ID: " << number(kAPICLocales[kSMPCount]) << kendl; + (void)(kout << "SMP: APIC ID: " << number(kAPICLocales[kSMPCount]) << kendl); // I'll just make the AP start from scratch here. @@ -265,7 +264,7 @@ namespace Kernel::HAL ++index; } - kout << "SMP: number of APs: " << number(kSMPCount) << kendl; + (void)(kout << "SMP: number of APs: " << number(kSMPCount) << kendl); // Kernel is now SMP aware. // That means that the scheduler is now available (on MP Kernels) diff --git a/dev/kernel/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cc b/dev/kernel/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cc index 7de5bb0b..7209fd06 100644 --- a/dev/kernel/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cc +++ b/dev/kernel/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cc @@ -22,13 +22,13 @@ EXTERN_C void idt_handle_gpf(Kernel::UIntPtr rsp) kIsScheduling = NO; - kout << "Kernel: General Protection Fault.\r"; + Kernel::kout << "Kernel: General Protection Fault.\r"; process.Leak().ProcessSignal.SignalArg = rsp; process.Leak().ProcessSignal.SignalID = SIGKILL; process.Leak().ProcessSignal.PreviousStatus = process.Leak().Status; - kout << "Kernel: SIGKILL status.\r"; + Kernel::kout << "Kernel: SIGKILL status.\r"; process.Leak().Status = Kernel::ProcessStatusKind::kKilled; @@ -46,8 +46,8 @@ EXTERN_C void idt_handle_pf(Kernel::UIntPtr rsp) kIsScheduling = NO; - kout << "Kernel: Page Fault.\r"; - kout << "Kernel: SIGKILL\r"; + Kernel::kout << "Kernel: Page Fault.\r"; + Kernel::kout << "Kernel: SIGKILL\r"; process.Leak().ProcessSignal.SignalArg = rsp; process.Leak().ProcessSignal.SignalID = SIGKILL; @@ -66,6 +66,8 @@ namespace Kernel::Detail /// @brief Handle scheduler interrupt. EXTERN_C void idt_handle_scheduler(Kernel::UIntPtr rsp) { + NE_UNUSED(rsp); + static Kernel::Int64 try_count_before_brute = Kernel::Detail::kTimeoutCount; while (kIsScheduling) @@ -95,13 +97,13 @@ EXTERN_C void idt_handle_math(Kernel::UIntPtr rsp) kIsScheduling = NO; - kout << "Kernel: Math error (division by zero?).\r"; + Kernel::kout << "Kernel: Math error (division by zero?).\r"; process.Leak().ProcessSignal.SignalArg = rsp; process.Leak().ProcessSignal.SignalID = SIGKILL; process.Leak().ProcessSignal.PreviousStatus = process.Leak().Status; - kout << "Kernel: SIGKILL status.\r"; + Kernel::kout << "Kernel: SIGKILL status.\r"; process.Leak().Status = Kernel::ProcessStatusKind::kKilled; @@ -119,13 +121,13 @@ EXTERN_C void idt_handle_generic(Kernel::UIntPtr rsp) kIsScheduling = NO; - kout << "Kernel: Generic Process Fault.\r"; + Kernel::kout << "Kernel: Generic Process Fault.\r"; process.Leak().ProcessSignal.SignalArg = rsp; process.Leak().ProcessSignal.SignalID = SIGKILL; process.Leak().ProcessSignal.PreviousStatus = process.Leak().Status; - kout << "Kernel: SIGKILL status.\r"; + Kernel::kout << "Kernel: SIGKILL status.\r"; process.Leak().Status = Kernel::ProcessStatusKind::kKilled; @@ -138,7 +140,7 @@ EXTERN_C Kernel::Void idt_handle_breakpoint(Kernel::UIntPtr rip) if (process.Leak().Status != Kernel::ProcessStatusKind::kRunning) { - kout << "Kernel: SIGTRAP\r"; + Kernel::kout << "Kernel: SIGTRAP\r"; while (YES) ; @@ -146,15 +148,15 @@ EXTERN_C Kernel::Void idt_handle_breakpoint(Kernel::UIntPtr rip) kIsScheduling = NO; - kout << "Kernel: Process RIP: " << Kernel::hex_number(rip) << kendl; - kout << "Kernel: SIGTRAP\r"; + (void)(Kernel::kout << "Kernel: Process RIP: " << Kernel::hex_number(rip) << Kernel::kendl); + Kernel::kout << "Kernel: SIGTRAP\r"; process.Leak().ProcessSignal.SignalArg = rip; process.Leak().ProcessSignal.SignalID = SIGTRAP; process.Leak().ProcessSignal.PreviousStatus = process.Leak().Status; - kout << "Kernel: SIGTRAP status.\r"; + Kernel::kout << "Kernel: SIGTRAP status.\r"; process.Leak().Status = Kernel::ProcessStatusKind::kFrozen; } @@ -170,13 +172,13 @@ EXTERN_C void idt_handle_ud(Kernel::UIntPtr rsp) kIsScheduling = NO; - kout << "Kernel: Undefined Opcode.\r"; + Kernel::kout << "Kernel: Undefined Opcode.\r"; process.Leak().ProcessSignal.SignalArg = rsp; process.Leak().ProcessSignal.SignalID = SIGKILL; process.Leak().ProcessSignal.PreviousStatus = process.Leak().Status; - kout << "Kernel: SIGKILL status.\r"; + Kernel::kout << "Kernel: SIGKILL status.\r"; process.Leak().Status = Kernel::ProcessStatusKind::kKilled; @@ -190,7 +192,7 @@ EXTERN_C Kernel::Void hal_system_call_enter(Kernel::UIntPtr rcx_syscall_index, K { if (rcx_syscall_index < kSyscalls.Count()) { - kout << "syscall: Enter Syscall.\r"; + Kernel::kout << "syscall: Enter Syscall.\r"; if (kSyscalls[rcx_syscall_index].fHooked) { @@ -200,15 +202,15 @@ EXTERN_C Kernel::Void hal_system_call_enter(Kernel::UIntPtr rcx_syscall_index, K } else { - kout << "syscall: syscall isn't valid at all! (is nullptr)\r"; + Kernel::kout << "syscall: syscall isn't valid at all! (is nullptr)\r"; } } else { - kout << "syscall: syscall isn't hooked at all! (is set to false)\r"; + Kernel::kout << "syscall: syscall isn't hooked at all! (is set to false)\r"; } - kout << "syscall: Exit Syscall.\r"; + Kernel::kout << "syscall: Exit Syscall.\r"; } } @@ -219,7 +221,7 @@ EXTERN_C Kernel::Void hal_kernel_call_enter(Kernel::UIntPtr rcx_kerncall_index, { if (rcx_kerncall_index < kKerncalls.Count()) { - kout << "kerncall: Enter Kernel Call List.\r"; + Kernel::kout << "kerncall: Enter Kernel Call List.\r"; if (kKerncalls[rcx_kerncall_index].fHooked) { @@ -229,14 +231,14 @@ EXTERN_C Kernel::Void hal_kernel_call_enter(Kernel::UIntPtr rcx_kerncall_index, } else { - kout << "kerncall: Kernel call isn't valid at all! (is nullptr)\r"; + Kernel::kout << "kerncall: Kernel call isn't valid at all! (is nullptr)\r"; } } else { - kout << "kerncall: Kernel call isn't hooked at all! (is set to false)\r"; + Kernel::kout << "kerncall: Kernel call isn't hooked at all! (is set to false)\r"; } - kout << "kerncall: Exit Kernel Call List.\r"; + Kernel::kout << "kerncall: Exit Kernel Call List.\r"; } } diff --git a/dev/kernel/HALKit/AMD64/HalDebugOutput.cc b/dev/kernel/HALKit/AMD64/HalDebugOutput.cc index e79b6b09..0ee7eef0 100644 --- a/dev/kernel/HALKit/AMD64/HalDebugOutput.cc +++ b/dev/kernel/HALKit/AMD64/HalDebugOutput.cc @@ -65,6 +65,8 @@ namespace Kernel EXTERN_C void ke_io_write(IDeviceObject<const Char*>* obj, const Char* bytes) { + NE_UNUSED(obj); + #ifdef __DEBUG__ Detail::hal_serial_init<Detail::kPort>(); @@ -82,7 +84,7 @@ namespace Kernel index = 0; len = rt_string_len(bytes, 256U); - static int x = kFontSizeX, y = kFontSizeY; + static SizeT x = kFontSizeX, y = kFontSizeY; static BOOL not_important = YES; @@ -123,12 +125,8 @@ namespace Kernel { y = kFontSizeY; - fb_init(); - FBDrawInRegion(fb_get_clear_clr(), FB::FBAccessibilty::Height(), FB::FBAccessibilty::Width(), 0, 0); - - fb_clear(); } ++index; @@ -183,7 +181,7 @@ namespace Kernel TerminalDevice TerminalDevice::The() noexcept { - TerminalDevice out(Kernel::ke_io_write, Kernel::ke_io_read); + static TerminalDevice out(Kernel::ke_io_write, Kernel::ke_io_read); return out; } diff --git a/dev/kernel/HALKit/AMD64/HalDescriptorLoader.cc b/dev/kernel/HALKit/AMD64/HalDescriptorLoader.cc index 96276964..ddfc49b6 100644 --- a/dev/kernel/HALKit/AMD64/HalDescriptorLoader.cc +++ b/dev/kernel/HALKit/AMD64/HalDescriptorLoader.cc @@ -17,26 +17,8 @@ namespace Kernel::HAL STATIC ::Kernel::Detail::AMD64::InterruptDescriptorAMD64 kInterruptVectorTable[kKernelIdtSize] = {}; - STATIC void hal_set_irq_mask(UInt8 irql); - STATIC void hal_clear_irq_mask(UInt8 irql); - - STATIC Void hal_enable_pit(UInt16 ticks) noexcept - { - if (ticks == 0) - ticks = kPITDefaultTicks; - - // Configure PIT to receieve scheduler interrupts. - - 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(kPITChannel0Port, (kPITCommDivisor >> 8) & 0xFF); // Send high byte - - hal_clear_irq_mask(32); - } - - STATIC void hal_set_irq_mask(UInt8 irql) +#if 0 + STATIC void hal_set_irq_mask(UInt8 irql) [[maybe_unused]] { UInt16 port; UInt8 value; @@ -54,8 +36,9 @@ namespace Kernel::HAL value = rt_in8(port) | (1 << irql); rt_out8(port, value); } +#endif // make gcc shut up - STATIC void hal_clear_irq_mask(UInt8 irql) + STATIC void hal_clear_irq_mask(UInt8 irql) [[maybe_unused]] { UInt16 port; UInt8 value; @@ -73,6 +56,22 @@ namespace Kernel::HAL value = rt_in8(port) & ~(1 << irql); rt_out8(port, value); } + + STATIC Void hal_enable_pit(UInt16 ticks) noexcept + { + if (ticks == 0) + ticks = kPITDefaultTicks; + + // Configure PIT to receieve scheduler interrupts. + + 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(kPITChannel0Port, (kPITCommDivisor >> 8) & 0xFF); // Send high byte + + hal_clear_irq_mask(32); + } } // namespace Detail /// @brief Loads the provided Global Descriptor Table. diff --git a/dev/kernel/HALKit/AMD64/HalKernelMain.cc b/dev/kernel/HALKit/AMD64/HalKernelMain.cc index 0d58bb8a..cc346b5c 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 { kEndTim = hal_rdtsc_fn(); - kout << "Boot Time: " << Kernel::number(kEndTim - kStartTim) << kendl; + (void)(Kernel::kout << "Boot Time: " << Kernel::number(kEndTim - kStartTim) << Kernel::kendl); Kernel::NeFS::fs_init_nefs(); @@ -110,7 +110,7 @@ EXTERN_C Kernel::Void hal_real_init(Kernel::Void) noexcept kEndTim = hal_rdtsc_fn(); - kout << "Init Time: " << Kernel::number(kEndTim - kStartTim) << kendl; + (void)(Kernel::kout << "Init Time: " << Kernel::number(kEndTim - kStartTim) << Kernel::kendl); idt_loader.Load(idt_reg); diff --git a/dev/kernel/HALKit/AMD64/HalKernelPanic.cc b/dev/kernel/HALKit/AMD64/HalKernelPanic.cc index 3703692c..2641f058 100644 --- a/dev/kernel/HALKit/AMD64/HalKernelPanic.cc +++ b/dev/kernel/HALKit/AMD64/HalKernelPanic.cc @@ -33,16 +33,9 @@ namespace Kernel /***********************************************************************************/ Void ke_panic(const Kernel::Int32& id, const Char* message) { - fb_init(); - - auto panic_text = RGB(0xff, 0xff, 0xff); - - auto y = 10; - auto x = 10; - - kout << "Kernel_Panic_MSG: " << message << kendl; - kout << "Kernel_Panic_ID: " << hex_number(id) << kendl; - kout << "Kernel_Panic_CR2: " << hex_number((UIntPtr)hal_read_cr2()) << kendl; + (void)(kout << "Kernel_Panic_MSG: " << message << kendl); + (void)(kout << "Kernel_Panic_ID: " << hex_number(id) << kendl); + (void)(kout << "Kernel_Panic_CR2: " << hex_number((UIntPtr)hal_read_cr2()) << kendl); RecoveryFactory::Recover(); } @@ -59,8 +52,8 @@ namespace Kernel { if (!expr) { - kout << "Kernel_Panic_File: " << file << kendl; - kout << "Kernel_Panic_Line: " << line << kendl; + (void)(kout << "Kernel_Panic_File: " << file << kendl); + (void)(kout << "Kernel_Panic_Line: " << line << kendl); ke_panic(RUNTIME_CHECK_FAILED, file); // Runtime Check failed } diff --git a/dev/kernel/HALKit/AMD64/HalPagingMgrAMD64.cc b/dev/kernel/HALKit/AMD64/HalPagingMgrAMD64.cc index 040b6fd9..8bd98923 100644 --- a/dev/kernel/HALKit/AMD64/HalPagingMgrAMD64.cc +++ b/dev/kernel/HALKit/AMD64/HalPagingMgrAMD64.cc @@ -12,6 +12,41 @@ namespace Kernel::HAL { + namespace Detail + { + struct PTE + { + UInt64 Present : 1; + UInt64 Wr : 1; + UInt64 User : 1; + UInt64 Pwt : 1; // Page-level Write-Through + UInt64 Pcd : 1; // Page-level Cache Disable + UInt64 Accessed : 1; + UInt64 Dirty : 1; + UInt64 Pat : 1; // Page Attribute Table (or PS for PDE) + UInt64 Global : 1; + UInt64 Ignored1 : 3; // Available to software + UInt64 PhysicalAddress : 40; // Physical page frame address (bits 12–51) + UInt64 Ignored2 : 7; // More software bits / reserved + UInt64 Protection_key : 4; // Optional (if PKU enabled) + UInt64 Reserved : 1; // Usually reserved + UInt64 Nx : 1; // No Execute + }; + } // namespace Detail + + /***********************************************************************************/ + /// \brief Retrieve the page status of a PTE. + /// \param pte Page Table Entry pointer. + /***********************************************************************************/ + STATIC Void mmi_page_status(Detail::PTE* pte) + { + (void)(kout << (pte->Present ? "Present" : "Not Present") << kendl); + (void)(kout << (pte->Wr ? "W/R" : "Not W/R") << kendl); + (void)(kout << (pte->Nx ? "NX" : "Not NX") << kendl); + (void)(kout << (pte->User ? "User" : "Not User") << kendl); + (void)(kout << (pte->Pcd ? "Not Cached" : "Cached") << kendl); + } + /***********************************************************************************/ /// @brief Gets a physical address from a virtual address. /// @param virt a valid virtual address. @@ -25,6 +60,8 @@ namespace Kernel::HAL UInt64 cr3 = (UInt64)hal_read_cr3() & ~kPageOffsetMask; + hal_invl_tlb(virt); + // Level 4 auto pml4 = reinterpret_cast<UInt64*>(cr3); UInt64 pml4e = pml4[(vaddr >> 39) & kMask9Bits]; @@ -54,28 +91,16 @@ namespace Kernel::HAL // Level 1 auto pt = reinterpret_cast<UInt64*>(pde & ~kPageOffsetMask); - UInt64 pte = pt[(vaddr >> 12) & kMask9Bits]; + Detail::PTE* pte = (Detail::PTE*)pt[(vaddr >> 12) & kMask9Bits]; - if (!(pte & 1)) + if (!pte->Present) return 0; - return (pte & ~kPageOffsetMask) | (vaddr & kPageOffsetMask); - } + mmi_page_status((Detail::PTE*)pte); - /***********************************************************************************/ - /// \brief Retrieve the page status of a PTE. - /// \param pte Page Table Entry pointer. - /***********************************************************************************/ - STATIC Void mmi_page_status(PTE* pte) - { - kout << (pte->Present ? "Present" : "Not Present") << kendl; - kout << (pte->Wr ? "W/R" : "Not W/R") << kendl; - kout << (pte->ExecDisable ? "NX" : "Not NX") << kendl; - kout << (pte->User ? "User" : "Not User") << kendl; + return pte->PhysicalAddress; } - STATIC Int32 mmi_map_page_table_entry(UIntPtr virtual_address, UInt32 physical_address, UInt32 flags, NE_PTE* pt_entry, NE_PDE* pd_entry); - /***********************************************************************************/ /// @brief Maps or allocates a page from virtual_address. /// @param virtual_address a valid virtual address. @@ -95,39 +120,36 @@ namespace Kernel::HAL UInt64 pml4e = pml4[(vaddr >> 39) & kMask9]; if (!(pml4e & 1)) - return 1; + return kErrorInvalidData; auto pdpt = reinterpret_cast<UInt64*>(pml4e & ~kPageMask); UInt64 pdpte = pdpt[(vaddr >> 30) & kMask9]; if (!(pdpte & 1)) - return 1; + return kErrorInvalidData; auto pd = reinterpret_cast<UInt64*>(pdpte & ~kPageMask); UInt64 pde = pd[(vaddr >> 21) & kMask9]; if (!(pde & 1)) - return 1; - - auto pt = reinterpret_cast<UInt64*>(pde & ~kPageMask); - UInt64& pte = pt[(vaddr >> 12) & kMask9]; + return kErrorInvalidData; - // Set the new PTE - pte = (reinterpret_cast<UInt64>(physical_address) & ~0xFFFULL) | 0x01ULL; // Present + UInt64* pt = reinterpret_cast<UInt64*>(pde & ~kPageMask); + Detail::PTE* pte = (Detail::PTE*)pt[(vaddr >> 12) & kMask9]; - if (flags & ~kMMFlagsPresent) - pte &= ~(0x01ULL); // Not Present + pte->Present = !!(flags & kMMFlagsPresent); + pte->Wr = !!(flags & kMMFlagsWr); + pte->User = !!(flags & kMMFlagsUser); + pte->Nx = !!(flags & kMMFlagsNX); + pte->Pcd = !(flags & kMMFlagsUncached); - if (flags & kMMFlagsWr) - pte |= 1 << 1; // Writable + if (physical_address) + pte->PhysicalAddress = (UIntPtr)physical_address; - if (flags & kMMFlagsUser) - pte |= 1 << 2; // User + hal_invl_tlb(virtual_address); - if (flags & kMMFlagsNX) - pte |= 1ULL << 63; // NX + mmi_page_status(pte); - hal_invl_tlb(virtual_address); - return 0; + return kErrorSuccess; } } // namespace Kernel::HAL diff --git a/dev/kernel/HALKit/AMD64/HalSchedulerCorePrimitivesAMD64.cc b/dev/kernel/HALKit/AMD64/HalSchedulerCorePrimitivesAMD64.cc index fafb29e9..dea3b3d4 100644 --- a/dev/kernel/HALKit/AMD64/HalSchedulerCorePrimitivesAMD64.cc +++ b/dev/kernel/HALKit/AMD64/HalSchedulerCorePrimitivesAMD64.cc @@ -37,6 +37,7 @@ namespace Kernel /// Wakes up thread from the hang state. Void mp_wakeup_thread(HAL::StackFrame* stack) { + NE_UNUSED(stack); Kernel::UserProcessHelper::StartScheduling(); } @@ -44,6 +45,8 @@ namespace Kernel /// hooks and hangs thread to prevent code from executing. Void mp_hang_thread(HAL::StackFrame* stack) { + NE_UNUSED(stack); + while (Yes) { /* Nothing to do, code is spinning */ diff --git a/dev/kernel/HALKit/AMD64/HalTimerAMD64.cc b/dev/kernel/HALKit/AMD64/HalTimerAMD64.cc index 2cb23716..01be2be5 100644 --- a/dev/kernel/HALKit/AMD64/HalTimerAMD64.cc +++ b/dev/kernel/HALKit/AMD64/HalTimerAMD64.cc @@ -53,7 +53,7 @@ HardwareTimer::HardwareTimer(Int64 ms) auto hpet = (Detail::HPET_BLOCK*)power.Find("HPET").Leak().Leak();
MUST_PASS(hpet);
- fDigitalTimer = (IntPtr*)hpet->address.Address;
+ fDigitalTimer = (UIntPtr*)hpet->address.Address;
}
HardwareTimer::~HardwareTimer()
diff --git a/dev/kernel/HALKit/AMD64/PCI/DMA.cc b/dev/kernel/HALKit/AMD64/PCI/DMA.cc index 33cff13e..4a63625e 100644 --- a/dev/kernel/HALKit/AMD64/PCI/DMA.cc +++ b/dev/kernel/HALKit/AMD64/PCI/DMA.cc @@ -31,14 +31,14 @@ namespace Kernel return reinterpret_cast<UIntPtr>(this->fAddress) >= offset; } - bool DMAWrapper::Write(const UIntPtr& bit, const UInt32& offset) + bool DMAWrapper::Write(UIntPtr& bit, const UInt32& offset) { kout << "[DMAWrapper::Read] Checking this->fAddress...\r"; if (!this->fAddress) return false; - kout << "[DMAWrapper::Write] Writing at address: " << hex_number(reinterpret_cast<UIntPtr>(this->fAddress) + offset) << kendl; + (void)(kout << "[DMAWrapper::Write] Writing at address: " << hex_number(reinterpret_cast<UIntPtr>(this->fAddress) + offset) << kendl); ke_dma_write<UInt32>(reinterpret_cast<UIntPtr>(this->fAddress), offset, bit); @@ -52,12 +52,12 @@ namespace Kernel if (!this->fAddress) return ~0; - kout << "[DMAWrapper::Write] Writing at address: " << hex_number(reinterpret_cast<UIntPtr>(this->fAddress) + offset) << kendl; + (void)(kout << "[DMAWrapper::Write] Writing at address: " << hex_number(reinterpret_cast<UIntPtr>(this->fAddress) + offset) << kendl); - return ke_dma_read<UInt32>(reinterpret_cast<UIntPtr>(this->fAddress), offset); + return (UIntPtr)ke_dma_read<UInt32>(reinterpret_cast<UIntPtr>(this->fAddress), offset); } - UIntPtr DMAWrapper::operator[](const UIntPtr& offset) + UIntPtr DMAWrapper::operator[](UIntPtr& offset) { return this->Read(offset); } diff --git a/dev/kernel/HALKit/AMD64/Paging.h b/dev/kernel/HALKit/AMD64/Paging.h index 474c74e7..da90a71a 100644 --- a/dev/kernel/HALKit/AMD64/Paging.h +++ b/dev/kernel/HALKit/AMD64/Paging.h @@ -41,25 +41,6 @@ EXTERN_C Kernel::VoidPtr hal_read_cr3(); // @brief Page table. namespace Kernel::HAL { - /// @brief Final page entry (Not PML, PDPT) - struct PACKED NE_PTE final - { - UInt64 Present : 1; - UInt64 Wr : 1; - UInt64 User : 1; - UInt64 Wt : 1; - UInt64 Cache : 1; - UInt64 Accessed : 1; - UInt64 Dirty : 1; - UInt64 MemoryType : 1; - UInt64 Global : 1; - UInt64 Resvered1 : 3; - UInt64 PhysicalAddress : 36; - UInt64 Reserved2 : 10; - UInt64 ProtectionKey : 5; - UInt64 ExecDisable : 1; - }; - namespace Detail { enum class ControlRegisterBits @@ -83,17 +64,13 @@ namespace Kernel::HAL } } // namespace Detail - struct NE_PDE final - { - NE_PTE* ALIGN(kPageAlign) fEntries[kPageMax]; - }; - auto mm_alloc_bitmap(Boolean wr, Boolean user, SizeT size, Bool is_page, const SizeT pad = 0) -> VoidPtr; + auto mm_alloc_bitmap(Boolean wr, Boolean user, SizeT size, Bool is_page, SizeT pad = 0) -> VoidPtr; auto mm_free_bitmap(VoidPtr page_ptr) -> Bool; } // namespace Kernel::HAL namespace Kernel { - typedef HAL::NE_PTE PTE; - typedef HAL::NE_PDE PDE; + typedef VoidPtr PTE; + typedef VoidPtr PDE; } // namespace Kernel diff --git a/dev/kernel/HALKit/AMD64/Processor.h b/dev/kernel/HALKit/AMD64/Processor.h index eff0292b..ff9d13a5 100644 --- a/dev/kernel/HALKit/AMD64/Processor.h +++ b/dev/kernel/HALKit/AMD64/Processor.h @@ -68,11 +68,12 @@ namespace Kernel::HAL /// @brief Memory Manager mapping flags. enum { - kMMFlagsInvalid = 0 << 0, - kMMFlagsPresent = 1 << 0, - kMMFlagsWr = 1 << 1, - kMMFlagsUser = 1 << 2, - kMMFlagsNX = 1 << 3, + kMMFlagsInvalid = 1 << 0, + kMMFlagsPresent = 1 << 1, + kMMFlagsWr = 1 << 2, + kMMFlagsUser = 1 << 3, + kMMFlagsNX = 1 << 4, + kMMFlagsUncached = 1 << 5, kMMFlagsCount = 4, }; diff --git a/dev/kernel/HALKit/AMD64/Storage/AHCI+Generic.cc b/dev/kernel/HALKit/AMD64/Storage/AHCI+Generic.cc index 41aabca2..f0893e2d 100644 --- a/dev/kernel/HALKit/AMD64/Storage/AHCI+Generic.cc +++ b/dev/kernel/HALKit/AMD64/Storage/AHCI+Generic.cc @@ -76,7 +76,7 @@ namespace AHCI::Detail UIntPtr addr = (UIntPtr)address; - UIntPtr aligned_addr = (addr + alignement - 1) & ~alignement - 1; + UIntPtr aligned_addr = (addr + alignement - 1) & (~alignement - 1); return (RetType*)aligned_addr; } @@ -87,7 +87,7 @@ STATIC Void drv_compute_disk_ahci() noexcept kSATASectorCount = 0UL; /// Normally 512 bytes, but add an additional 512 bytes to make 1 KIB. - const UInt16 kSzIdent = 256; + const UInt16 kSzIdent = 512; /// Push it to the stack UInt16* identify_data = AHCI::Detail::ahci_align_address<UInt16>(new UInt16[kSzIdent], kib_cast(1)); @@ -107,6 +107,8 @@ STATIC Void drv_compute_disk_ahci() noexcept else kSATASectorCount = lba48_sectors; + (Void)(kout << "Device: " << kCurrentDiskModel << kendl); + delete[] identify_data; identify_data = nullptr; } @@ -141,7 +143,7 @@ STATIC Void drv_std_input_output_ahci(UInt64 lba, UInt8* buffer, SizeT sector_sz slot = drv_find_cmd_slot_ahci(&kSATAHba->Ports[kSATAIndex]); - if (slot == ~0) + if (slot == ~0UL) { err_global_get() = kErrorDisk; return; @@ -166,11 +168,8 @@ STATIC Void drv_std_input_output_ahci(UInt64 lba, UInt8* buffer, SizeT sector_sz /// check for command header. MUST_PASS(command_header); - /// 4kb per PRD. - constexpr const UInt32 kMaxPRDSize = kib_cast(4); - - command_header->Cfl = sizeof(FisRegH2D) / sizeof(UInt32); - command_header->Write = Write; + command_header->Struc.Cfl = sizeof(FisRegH2D) / sizeof(UInt32); + command_header->Struc.Write = Write; command_header->Prdtl = 1; auto ctba_phys = ((UInt64)command_header->Ctbau << 32) | command_header->Ctba; @@ -186,7 +185,7 @@ STATIC Void drv_std_input_output_ahci(UInt64 lba, UInt8* buffer, SizeT sector_sz command_table->Prdt[0].Dba = (UInt32)(buffer_phys & 0xFFFFFFFF); command_table->Prdt[0].Dbau = (UInt32)(buffer_phys >> 32); command_table->Prdt[0].Dbc = bytes_remaining - 1; - command_table->Prdt[0].Ie = 1; + command_table->Prdt[0].Ie = NO; volatile FisRegH2D* h2d_fis = (volatile FisRegH2D*)(&command_table->Cfis[0]); @@ -300,6 +299,8 @@ STATIC Bool drv_std_init_ahci(UInt16& pi, BOOL& atapi) kSATADev.EnableMmio(); kSATADev.BecomeBusMaster(); + HAL::mm_map_page((VoidPtr)mem_ahci, (VoidPtr)mem_ahci, HAL::kMMFlagsPresent | HAL::kMMFlagsWr | HAL::kMMFlagsUncached); + UInt32 ports_implemented = mem_ahci->Pi; UInt16 ahci_index = 0; diff --git a/dev/kernel/HALKit/AMD64/Storage/PIO+Generic.cc b/dev/kernel/HALKit/AMD64/Storage/PIO+Generic.cc index fc608e94..cc8c92d8 100644 --- a/dev/kernel/HALKit/AMD64/Storage/PIO+Generic.cc +++ b/dev/kernel/HALKit/AMD64/Storage/PIO+Generic.cc @@ -28,7 +28,6 @@ using namespace Kernel::HAL; #define kATADataLen 256 STATIC Boolean kATADetected = false; -STATIC Int32 kATADeviceType = kATADeviceCount; STATIC UInt16 kATAIdentifyData[kATADataLen] = {0}; STATIC Char kATADiskModel[50] = {"GENERIC PIO"}; @@ -67,6 +66,8 @@ Boolean drv_pio_std_init(UInt16 Bus, UInt8 Drive, UInt16& OutBus, UInt8& OutMast { UInt16 IO = Bus; + NE_UNUSED(Drive); + drv_pio_std_select(IO); // Bus init, NEIN bit. @@ -107,7 +108,7 @@ ATAInit_Retry: kATADiskModel[40] = '\0'; - kout << "Drive Model: " << kATADiskModel << kendl; + (void)(kout << "Drive Model: " << kATADiskModel << kendl); return true; } diff --git a/dev/kernel/HALKit/ARM64/HalApplicationProcessor.cc b/dev/kernel/HALKit/ARM64/HalApplicationProcessor.cc index 8ad16c57..1553b2ed 100644 --- a/dev/kernel/HALKit/ARM64/HalApplicationProcessor.cc +++ b/dev/kernel/HALKit/ARM64/HalApplicationProcessor.cc @@ -93,7 +93,7 @@ namespace Kernel const UInt16 kInterruptScheduler = 0x20;
- kout << "Handling interrupt for AP: " << interrupt << kendl;
+ (void)(kout << "Handling interrupt for AP: " << interrupt << kendl);
switch (interrupt)
{
diff --git a/dev/kernel/HALKit/ARM64/HalKernelPanic.cc b/dev/kernel/HALKit/ARM64/HalKernelPanic.cc index 1e008c0f..1c88ccc6 100644 --- a/dev/kernel/HALKit/ARM64/HalKernelPanic.cc +++ b/dev/kernel/HALKit/ARM64/HalKernelPanic.cc @@ -71,8 +71,8 @@ namespace Kernel { if (!expr) { - kout << "FAILED: FILE: " << file << kendl; - kout << "FAILED: LINE: " << line << kendl; + (void)(kout << "FAILED: FILE: " << file << kendl); + (void)(kout << "FAILED: LINE: " << line << kendl); ke_panic(RUNTIME_CHECK_FAILED, file); // Runtime Check failed } |
