summaryrefslogtreecommitdiff
path: root/Kernel/Time
AgeCommit message (Collapse)Author
2023-06-04Kernel: Move InterruptDisabler to the Interrupts subdirectoryLiav A
2023-06-04Kernel: Move Performance-measurement code to the Tasks subdirectoryLiav A
2023-06-04Kernel: Move TimerQueue code to the Time subdirectoryLiav A
2023-06-04Kernel: Move all boot-related code to the new Boot subdirectoryLiav A
2023-06-04Kernel: Move all tasks-related code to the Tasks subdirectoryLiav A
2023-05-25Kernel/aarch64: Fix build after #17842Daniel Bertalan
2023-05-24Everywhere: Use MonotonicTime instead of Durationkleines Filmröllchen
This is easily identifiable by anyone who uses Duration::now_monotonic, and any downstream users of that data.
2023-05-24Kernel: Use UnixDateTime wherever applicablekleines Filmröllchen
"Wherever applicable" = most places, actually :^), especially for networking and filesystem timestamps. This includes changes to unzip, which uses DOSPackedTime, since that is changed for the FAT file systems.
2023-05-24AK: Rename Time to Durationkleines Filmröllchen
That's what this class really is; in fact that's what the first line of the comment says it is. This commit does not rename the main files, since those will contain other time-related classes in a little bit.
2023-04-25Kernel: Remove is_sharing_with_others API from GenericInterruptHandlerPankaj Raghav
is_sharing_with_others API was never really put to use properly since it was introduced. The only place where it is used in Interrupts.cpp is in conjuction with is_shared_handler() which is only true for SharedIRQHandler and is_sharing_with_others will always return false. Remove that API.
2023-04-06Kernel: Implement TimeManagement::boot_time() for aarch64Timon Kruiper
For now just return 0 as we have no RTC support on aarch64 yet, and add a FIXME to return the correct value.
2023-03-08Kernel: Add missing include that broke the AARCH64 buildMarco Cutecchia
2023-03-06Kernel: Stop using NonnullLockRefPtrVectorAndreas Kling
2023-02-21Kernel: Support more clocks in sys$clock_getres()Humberto Alves
Support all the available clocks in clock_getres(). Also, fix this function to use the actual ticks per second value, not the constant `_SC_CLK_TCK` (which is always equal to 8) and move the resolution computation logic to TimeManagement.
2023-01-27Kernel: Remove declarations for non-existent methodsSam Atkins
2022-12-28Kernel: Reorganize Arch/x86 directory to Arch/x86_64 after i686 removalLiav A
No functional change.
2022-12-28Kernel: Remove i686 supportLiav A
2022-11-24Kernel: Use AK::Time for InodeMetadata timestamps instead of time_tAndreas Kling
Before this change, we were truncating the nanosecond part of file timestamps in many different places.
2022-10-17Kernel: Implement TimeManagement for aarch64Timon Kruiper
This sets up the RPi::Timer to trigger an interurpt every 4ms using one of the comparators. The actual time is calculated by looking at the main counter of the RPi::Timer using the Timer::update_time function. A stub for Scheduler::timer_tick is also added, since the TimeManagement code now calls the function.
2022-10-17Kernel/aarch64: Implement HardwareTimer for RPi::TimerTimon Kruiper
This makes the RPi::Timer suitable for use in the TimeManagement code.
2022-10-17Kernel: Move InterruptDisabler out of Arch directoryTimon Kruiper
The code in this file is not architecture specific, so it can be moved to the base Kernel directory.
2022-10-14Kernel: Move Scheduler current time method to the TimeManagement codeLiav A
2022-09-23Kernel: Move x86-specific timer code handling to Arch/x86/Time directoryLiav A
The APICTimer, HPET and RTC (the RTC timer is in the context of the PC RTC here) are timers that exist only in x86 platforms, therefore, we move the handling code and the initialization code to the Arch/x86/Time directory. Other related code patterns in the TimeManagement singleton and in the Random.cpp file are guarded with #ifdef to ensure they are only compiled for x86 builds.
2022-09-20Kernel: Move x86-specific IRQ controller code to Arch/x86 directoryLiav A
The PIC and APIC code are specific to x86 platforms, so move them out of the general Interrupts directory to Arch/x86/common/Interrupts directory instead.
2022-09-20Kernel/x86: Move RTC and CMOS code to x86 arch-specific subdirectoryLiav A
The RTC and CMOS are currently only supported for x86 platforms and use specific x86 instructions to produce only certain x86 plaform operations and results, therefore, we move them to the Arch/x86 specific directory.
2022-08-20Kernel: Make self-contained locking smart pointers their own classesAndreas Kling
Until now, our kernel has reimplemented a number of AK classes to provide automatic internal locking: - RefPtr - NonnullRefPtr - WeakPtr - Weakable This patch renames the Kernel classes so that they can coexist with the original AK classes: - RefPtr => LockRefPtr - NonnullRefPtr => NonnullLockRefPtr - WeakPtr => LockWeakPtr - Weakable => LockWeakable The goal here is to eventually get rid of the Lock* classes in favor of using external locking.
2022-08-20AK+Kernel: Add AK::AtomicRefCounted and use everywhere in the kernelAndreas Kling
Instead of having two separate implementations of AK::RefCounted, one for userspace and one for kernelspace, there is now RefCounted and AtomicRefCounted.
2022-07-27Everywhere: Make the codebase more architecture awareUndefine
2022-07-12Everywhere: Use default StringView constructor over nullptrsin-ack
While null StringViews are just as bad, these prevent the removal of StringView(char const*) as that constructor accepts a nullptr. No functional changes.
2022-07-12Everywhere: Add sv suffix to strings relying on StringView(char const*)sin-ack
Each of these strings would previously rely on StringView's char const* constructor overload, which would call __builtin_strlen on the string. Since we now have operator ""sv, we can replace these with much simpler versions. This opens the door to being able to remove StringView(char const*). No functional changes.
2022-06-15Kernel: Make TimeManagement::boot_time() staticAndreas Kling
2022-06-02Kernel: Move IRQController and InterruptManagement to Arch directoryTimon Kruiper
These 2 classes currently contain much code that is x86(_64) specific. Move them to the architecture specific directory. This also allows for a simpler implementation for aarch64.
2022-06-02Kernel: Implement InterruptDisabler using generic Processor functionsTimon Kruiper
Now that the code does not use architectural specific code, it is moved to the generic Arch directory and the paths are modified accordingly.
2022-06-02Kernel: Separate NonMaskableInterruptDisabler into its own fileTimon Kruiper
This is for the upcoming change to make InterruptDisabler class work for the aarch64 build.
2022-04-01Everywhere: Run clang-formatIdan Horowitz
2022-02-21Kernel: Use TRY() when validating clock_id in TimeManagementBrian Gianforcaro
Gets rid of a bit of code duplication, and makes the API more consistent with the style we are moving towards.
2022-01-18Kernel: Create the time page region before initializing the timersIdan Horowitz
We were unconditionally trying to update it in the interrupt, which would depend on the timer interrupt not being received too soon after the timers are initialized (before the time page was initialized), which was the case when using HPET timers via the ACPI tables, but not when using the PIT when ACPI was disabled.
2022-01-13Kernel: Make map_typed() & map_typed_writable() fallible using ErrorOrIdan Horowitz
This mostly just moved the problem, as a lot of the callers are not capable of propagating the errors themselves, but it's a step in the right direction.
2021-12-28Kernel: Remove the kmalloc_eternal heap :^)Andreas Kling
This was a premature optimization from the early days of SerenityOS. The eternal heap was a simple bump pointer allocator over a static byte array. My original idea was to avoid heap fragmentation and improve data locality, but both ideas were rooted in cargo culting, not data. We would reserve 4 MiB at boot and only ended up using ~256 KiB, wasting the rest. This patch replaces all kmalloc_eternal() usage by regular kmalloc().
2021-12-26Kernel: Encapsulate APIC initialization inside InterruptManagementPankaj Raghav
Currently the APIC class is constructed irrespective of whether it is used or not. So, move APIC initialization from init to the InterruptManagement class and construct the APIC class only when it is needed.
2021-12-11Kernel: Remove unused String.h includesHendiadyoin1
This makes searching for not yet OOM safe interfaces a bit easier.
2021-12-11Kernel: Simplify 64-bit HPET reads on x86_64Andreas Kling
We don't have to worry about racy 32-bit reads when we're reading the 64-bit HPET value using a 64-bit CPU. :^)
2021-11-08Kernel: Replace KResult and KResultOr<T> with Error and ErrorOr<T>Andreas Kling
We now use AK::Error and AK::ErrorOr<T> in both kernel and userspace! This was a slightly tedious refactoring that took a long time, so it's not unlikely that some bugs crept in. Nevertheless, it does pass basic functionality testing, and it's just real nice to finally see the same pattern in all contexts. :^)
2021-10-26Kernel: Add TimeManagement::is_initialized()Andreas Kling
This allows clients to check whether TimeManagement is available before trying to ask it about time related things.
2021-10-15Kernel: Add cross platform RegisterState header and Aarch64 versionJames Mintram
A new RegisterState header includes the platform specific RegisterState header based on the platform being compiled. The Aarch64 RegisterState header contains stubs for Debug
2021-10-03Kernel: Use `operator ""sv` in all purpose() implementationsBrian Gianforcaro
Previously there was a mix of returning plain strings and returning explicit string views using `operator ""sv`. This change switches them all to standardized on `operator ""sv` as it avoids a call to strlen.
2021-10-01Kernel: Move x86 IO instructions code into the x86 specific folderLiav A
2021-10-01Kernel: Remove IO.h include from a bunch of placesLiav A
2021-09-12Kernel: Move ACPI and BIOS code into the new Firmware directoryLiav A
This will somwhat help unify them also under the same SysFS directory in the commit. Also, it feels much more like this change reflects the reality that both ACPI and the BIOS are part of the firmware on x86 computers.
2021-09-08Kernel/ACPI: Return Optional container after table searchLiav A
This is a better pattern than returning a PhysicalAddress with a zero value, so the code is more understandable now.