summaryrefslogtreecommitdiff
path: root/Kernel/init.cpp
AgeCommit message (Collapse)Author
2020-05-04Kernel: Use Multiboot macros instead of magic constants (#2090)Nathan Lanza
MUTLIBOOT_FRAMEBUFFER_TYPE_{RGB,EGA_TEXT} are defined in the Multiboot.h header. Use those definitions instead of hard-coding 1 and 2.
2020-04-18Kernel: Remove CommandLine::get() in favor of lookup()Andreas Kling
lookup() returns an Optional<String> which allows us to implement easy default values using lookup(key).value_or(default_value);
2020-04-11Kernel: Instantiate network adapters in their own detect() methodsLiav A
This commit is one step forward for pluggable driver modules. Instead of creating instances of network adapter classes, we let their detect() methods to figure out if there are existing devices to initialize.
2020-04-11Kernel: Keep records of PCI::Address & PCI::ID pairs for enumerationLiav A
2020-04-09Kernel: Create BXVGA device if found in the PCI busLiav A
2020-04-09Kernel: Simplify the Time management initializationLiav A
2020-04-09Kernel: Run clang-format on init.cppLiav A
2020-04-09Kernel: Simplify the Interrupt management initializationLiav A
2020-04-09Kernel: Remove redundant "ACPI" from filenames in ACPI/Andreas Kling
2020-04-09Kernel: Merge ACPI::StaticParser into ACPI::ParserAndreas Kling
There's no need for StaticParser to be a separate thing from Parser.
2020-04-09Kernel: Remove "non-operational" ACPI parser stateAndreas Kling
If we don't support ACPI, just don't instantiate an ACPI parser. This is way less confusing than having a special parser class whose only purpose is to do nothing. We now search for the RSDP in ACPI::initialize() instead of letting the parser constructor do it. This allows us to defer the decision to create a parser until we're sure we can make a useful one.
2020-04-09Kernel: Move ACPI initialization from init.cpp to ACPI::initialize()Andreas Kling
2020-04-09Kernel: Move NetworkTask startup into NetworkTask::spawn()Andreas Kling
2020-04-08Kernel: Simplify PCI initialization logicAndreas Kling
- Get rid of the PCI::Initializer object which was not serving any real purpose or holding any data members. - Move command line parsing from init to PCI::initialize().
2020-04-08Kernel: Simplify VMWareBackdoor somewhatAndreas Kling
- If there is no VMWare backdoor, don't allocate memory for it. - Remove the "unsupported" state, instead just don't instantiate. - Move the command-line parsing from init to the driver. - Move mouse packet reception from PS2MouseDevice to VMWareBackdoor.
2020-04-08Kernel: Move global constructor invocation a bit earlierAndreas Kling
2020-04-08Kernel: Move sync and finalization tasks into their own filesAndreas Kling
Instead of clogging up the initialization sequence, put these tasks in their own files.
2020-04-08Kernel: Remove DebugLogDeviceAndreas Kling
This was a cute idea but ultimately it's just not useful since we already have the dbgputch() and dbgputstr() syscalls.
2020-04-08Kernel: Move more things from init() to init_stage2()Andreas Kling
The purpose of init() is to get multi-tasking up and running. We don't want to do anything in init() that doesn't advance that goal. This patch moves some things from init() to init_stage2(), and adds a comment block explaining the split.
2020-04-08Kernel: Rename KParams => Kernel::CommandLineAndreas Kling
Let's make this read more like English.
2020-04-08Kernel: Update cryptically-named functions related to symbolicationAndreas Kling
2020-04-06Kernel: Change Ext2FS to be backed by a file instead of a block deviceLiav A
In contrast to the previous patchset that was reverted, this time we use a "special" method to access a file with block size of 512 bytes (like a harddrive essentially).
2020-04-03Revert "Kernel: Change Ext2FS to be backed by a file instead of a block device"Andreas Kling
This reverts commit 6b59311d4bdc1447e085573f9bd2c42819e264dd. Reverting these changes since they broke things. Fixes #1608.
2020-04-02Kernel: Change Ext2FS to be backed by a file instead of a block deviceLiav A
This ensures that we can mount image files as virtual disks without the need of implementing gross hacks like loopback devices :)
2020-03-28Kernel: Remove the floppy driverAndreas Kling
Nobody was using this code, and it was not actively worked on, so let's just not have it. Press F.
2020-03-19Kernel: Introduce the new Time management subsystemLiav A
This new subsystem includes better abstractions of how time will be handled in the OS. We take advantage of the existing RTC timer to aid in keeping time synchronized. This is standing in contrast to how we handled time-keeping in the kernel, where the PIT was responsible for that function in addition to update the scheduler about ticks. With that new advantage, we can easily change the ticking dynamically and still keep the time synchronized. In the process context, we no longer use a fixed declaration of TICKS_PER_SECOND, but we call the TimeManagement singleton class to provide us the right value. This allows us to use dynamic ticking in the future, a feature known as tickless kernel. The scheduler no longer does by himself the calculation of real time (Unix time), and just calls the TimeManagment singleton class to provide the value. Also, we can use 2 new boot arguments: - the "time" boot argument accpets either the value "modern", or "legacy". If "modern" is specified, the time management subsystem will try to setup HPET. Otherwise, for "legacy" value, the time subsystem will revert to use the PIT & RTC, leaving HPET disabled. If this boot argument is not specified, the default pattern is to try to setup HPET. - the "hpet" boot argumet accepts either the value "periodic" or "nonperiodic". If "periodic" is specified, the HPET will scan for periodic timers, and will assert if none are found. If only one is found, that timer will be assigned for the time-keeping task. If more than one is found, both time-keeping task & scheduler-ticking task will be assigned to periodic timers. If this boot argument is not specified, the default pattern is to try to scan for HPET periodic timers. This boot argument has no effect if HPET is disabled. In hardware context, PIT & RealTimeClock classes are merely inheriting from the HardwareTimer class, and they allow to use the old i8254 (PIT) and RTC devices, managing them via IO ports. By default, the RTC will be programmed to a frequency of 1024Hz. The PIT will be programmed to a frequency close to 1000Hz. About HPET, depending if we need to scan for periodic timers or not, we try to set a frequency close to 1000Hz for the time-keeping timer and scheduler-ticking timer. Also, if possible, we try to enable the Legacy replacement feature of the HPET. This feature if exists, instructs the chipset to disconnect both i8254 (PIT) and RTC. This behavior is observable on QEMU, and was verified against the source code: https://github.com/qemu/qemu/commit/ce967e2f33861b0e17753f97fa4527b5943c94b6 The HPETComparator class is inheriting from HardwareTimer class, and is responsible for an individual HPET comparator, which is essentially a timer. Therefore, it needs to call the singleton HPET class to perform HPET-related operations. The new abstraction of Hardware timers brings an opportunity of more new features in the foreseeable future. For example, we can change the callback function of each hardware timer, thus it makes it possible to swap missions between hardware timers, or to allow to use a hardware timer for other temporary missions (e.g. calibrating the LAPIC timer, measuring the CPU frequency, etc).
2020-03-06Init Stage: Allow to boot with smp=onLiav A
One can now set the kernel boot argument smp to on, and therefore, to instruct the kernel to use the IOAPIC instead of the PIC.
2020-03-02Kernel: Use klog() instead of kprintf()Liav A
Also, duplicate data in dbg() and klog() calls were removed. In addition, leakage of virtual address to kernel log is prevented. This is done by replacing kprintf() calls to dbg() calls with the leaked data instead. Also, other kprintf() calls were replaced with klog().
2020-02-29Init Stage: Use latest changesLiav A
Now we setup interrupts before ACPI, and we don't use the ACPI parser to find the MADT table anymore.
2020-02-27Init Stage: Use dbg() instead of dbgprintf()Liav A
2020-02-24Kernel: Don't use references or pointers to physical addressesLiav A
Now the ACPI & PCI code is more safer, because we don't use raw pointers or references to objects or data that are located in the physical address space, so an accidental dereference cannot happen easily. Instead, we use the PhysicalAddress class to represent those addresses.
2020-02-24Kernel: Update the init stage to use all the latest changesLiav A
gdt_init() and idt_init() will be invoked earlier in the boot process. Also, setup_interrupts() will be called to setup the interrupt mode.
2020-02-17Kernel: Replace "current" with Thread::current and Process::currentAndreas Kling
Suggested by Sergey. The currently running Thread and Process are now Thread::current and Process::current respectively. :^)
2020-02-16Kernel: Move all code into the Kernel namespaceAndreas Kling
2020-02-10AK: Remove bitrotted Traits::dump() mechanismAndreas Kling
This was only used by HashTable::dump() which I used when doing the first HashTable implementation. Removing this allows us to also remove most includes of <AK/kstdio.h>.
2020-02-09Kernel: Apply changes to use LibBareMetal definitionsLiav A
2020-02-08Kernel: Merge unnecessary DiskDevice class into BlockDeviceAndreas Kling
2020-02-05Kernel Commandline: Change nopci_mmio to be pci_mmioLiav A
Instead of having nopci_mmio, the boot argument now is pci_mmio='on|off'.
2020-02-05Kernel Commandline: Change no_vmmouse boot argument to be vmmouseLiav A
Instead of having no_vmmouse, the boot argument now is vmmouse='on|off'.
2020-02-05Kernel Commandline: Remove noacpi & noacpi_aml boot argumentsLiav A
Instead of having boot arguments like noacpi & noacpi_aml, we have one boot argument - acpi='on|off|limited'.
2020-02-04Kernel: Add support for vmmouseLiav A
We add this feature together with the VMWareBackdoor class. VMWareBackdoor class is responsible for enabling the vmmouse, and then controlling it from the PS2 mouse IRQ handler.
2020-02-02Kernel: Detect devices when enumerating the PCI busLiav A
Instead of making each driver to enumerate the PCI bus itself, PCI::Initializer will call detect_devices() to do one enumeration of the bus.
2020-02-02Partition Table: Add support for Extended partitionsLiav A
Now also MBR configurations with extended partitions are supported.
2020-02-01Partition Table: Allow to boot with a partition number higher than 4Liav A
This is true currently only to GUID partitions, Booting with an MBR partition is still limited to partition numbers 1-4.
2020-02-01Kernel: Finalizer should not go back to sleep if there's more to doAndreas Kling
Before putting itself back on the wait queue, the finalizer task will now check if there's more work to do, and if so, do it first. :^) This patch also puts a bunch of process/thread debug logging behind PROCESS_DEBUG and THREAD_DEBUG since it was unbearable to debug this stuff with all the spam.
2020-01-22Revert "Kernel: Replace IRQHandler with the new InterruptHandler class"Andreas Kling
This reverts commit 6c72736b26a81a8f03d8dd47989bfffe26bb1c95. I am unable to boot on my home machine with this change in the tree.
2020-01-22Kernel: Replace IRQHandler with the new InterruptHandler classLiav A
System components that need an IRQ handling are now inheriting the InterruptHandler class. In addition to that, the initialization process of PATAChannel was changed to fit the changes. PATAChannel, E1000NetworkAdapter and RTL8139NetworkAdapter are now inheriting from PCI::Device instead of InterruptHandler directly.
2020-01-21Kernel: Remove map_for_kernel() in MemoryManagerLiav A
We don't need to have this method anymore. It was a hack that was used in many components in the system but currently we use better methods to create virtual memory mappings. To prevent any further use of this method it's best to just remove it completely. Also, the APIC code is disabled for now since it doesn't help booting the system, and is broken since it relies on identity mapping to exist in the first 1MB. Any call to the APIC code will result in assertion failed. In addition to that, the name of the method which is responsible to create an identity mapping between 1MB to 2MB was changed, to be more precise about its purpose.
2020-01-18Kernel: Clean up and reorganize init.cppAndreas Kling
This is where we first enter into the kernel, so we should make at least some effort to keep things nice and understandable.
2020-01-18Kernel: Move all CPU feature initialization into cpu_setup()Andreas Kling
..and do it very very early in boot.