summaryrefslogtreecommitdiff
path: root/Kernel/CommandLine.cpp
AgeCommit message (Collapse)Author
2021-08-09Kernel/USB: Create controller base class and introduce USBManagementLuke
This removes Pipes dependency on the UHCIController by introducing a controller base class. This will be used to implement other controllers such as OHCI. Additionally, there can be multiple instances of a UHCI controller. For example, multiple UHCI instances can be required for systems with EHCI controllers. EHCI relies on using multiple of either UHCI or OHCI controllers to drive USB 1.x devices. This means UHCIController can no longer be a singleton. Multiple instances of it can now be created and passed to the device and then to the pipe. To handle finding and creating these instances, USBManagement has been introduced. It has the same pattern as the other management classes such as NetworkManagement.
2021-08-08Kernel: Fix panic loop when encountering an unknown boot_modeBrian Gianforcaro
The kernel panic handler now parses the kernels boot_mode to decide how to handle the panic. So the previous logic could end up in an panic loop until we blew out the kernel stack. Instead only validate the kernel's boot mode once per boot, after initializing the kernel command line.
2021-07-26Kernel: Un-unmap-after-init CommandLine::boot_mode()Ali Mohammad Pur
This function is now used when the kernel panics, so unmapping it would make the kernel panic while in panic, which is not a good thing :P
2021-06-24Kernel: Move special sections into Sections.hHendiadyoin1
This also removes a lot of CPU.h includes infavor for Sections.h
2021-06-24Kernel: Pull apart CPU.hHendiadyoin1
This does not add any functional changes
2021-06-09Kernel/CommandLine: Add option to disable physical networking hardwareLiav A
This is useful for debugging sessions mostly.
2021-06-03Kernel: Fix "sv" being inside of "no-fbdev" instead of outsideLuke
It was previously "no-fbdevsv" when it should be "no-fbdev"sv.
2021-05-31Kernel: Move CommandLine API to use AK::StringView instead of AK::StringBrian Gianforcaro
The current CommandLine API unfortunately allocates Strings just to query the presence of arguments on the command line. Switch the API to use StringView instead to reduce the number of String allocations.
2021-05-29Kernel/Storage: Remove the None option from AHCI reset policyLiav A
This was proved to be a problematic option. I tested this option on bare metal AHCI controller, and if we didn't reset the controller, the firmware (SeaBIOS) could leave the controller state not clean, so an plugged device signature was in place although the specific port had no plugged device after rebooting. Therefore, we need to ensure we use the controller in a clean state always. In addition to that, the Complete option was renamed to Aggressive, as it represents better the consequences of choosing this option.
2021-05-21Kernel/Commandline: Allow the user to specify an embedded stringLiav A
This is by default left empty, so people won't run the kernel in a mode which they didn't want to. The embedded string will override the supplied commandline from the bootloader, which is good for debugging sessions. This change seemed important for me, because I debug the kernel on bare metal with iPXE, and every change to the commandline meant that I needed rewrite a new iPXE USB image with a modified iPXE script.
2021-05-21Kernel: Print commandline after initializing itLiav A
2021-05-16Kernel: Allow the user to specify the virtual console when bootingLiav A
2021-05-16Kernel/Graphics + SystemServer: Support text mode properlyLiav A
As we removed the support of VBE modesetting that was done by GRUB early on boot, we need to determine if we can modeset the resolution with our drivers, and if not, we should enable text mode and ensure that SystemServer knows about it too. Also, SystemServer should first check if there's a framebuffer device node, which is an indication that text mode was not even if it was requested. Then, if it doesn't find it, it should check what boot_mode argument the user specified (in case it's self-test). This way if we try to use bochs-display device (which is not VGA compatible) and request a text mode, it will not honor the request and will continue with graphical mode. Also try to print critical messages with mininum memory allocations possible. In LibVT, We make the implementation flexible for kernel-specific methods that are implemented in ConsoleImpl class.
2021-04-22Everything: Move to SPDX license identifiers in all files.Brian Gianforcaro
SPDX License Identifiers are a more compact / standardized way of representing file license information. See: https://spdx.dev/resources/use/#identifiers This was done with the `ambr` search and replace tool. ambr --no-parent-ignore --key-from-file --rep-from-file key.txt rep.txt *
2021-04-18Kernel: Add kernel command line flag to disable VirtIO supportIdan Horowitz
This command line flag can be used to disable VirtIO support on certain configurations (native windows) where interfacing with virtio devices can cause qemu to freeze.
2021-04-18Kernel: Add boot argument to disable the UHCI ControllerLuke
Helps with bare metal debugging, as we can't be sure our implementation will work with a given machine. As reported by someone on Discord, their machine hangs when we attempt the dummy transfer.
2021-04-08Kernel: Introduce two new boot arguments to assist with bare metal debugLiav A
The first one is for disabling the PS2 controller, the other one is for disabling physical storage enumeration. We can't be sure any machine will work with our implementation, therefore this will help us to test more machines.
2021-04-06Kernel/PCI: Disable ECAM method by defaultLiav A
Until I figure out what's going wrong with it on bare-metal, disable it unless explicitly enabled by the user.
2021-04-03Kernel/PCI: Introduce a new ECAM access mechanismLiav A
Now the kernel supports 2 ECAM access methods. MMIOAccess was renamed to WindowedMMIOAccess and is what we had until now - each device that is detected on boot is assigned to a memory-mapped window, so IO operations on multiple devices can occur simultaneously due to creating multiple virtual mappings, hence the name is a memory-mapped window. This commit adds a new class called MMIOAccess (not to be confused with the old MMIOAccess class). This class creates one memory-mapped window. On each IO operation on a configuration space of a device, it maps the requested PCI bus region to that window. Therefore it holds a SpinLock during the operation to ensure that no other PCI bus region was mapped during the call. A user can choose to either use PCI ECAM with memory-mapped window for each device, or for an entire bus. By default, the kernel prefers to map the entire PCI bus region.
2021-04-03Kernel: Enable PCI ECAM method again if availableLiav A
Apparently we don't enable PCI ECAM (MMIO access to the PCI configuration space) even if we can. This is a regression, as it was enabled in the past and in unknown time it was regressed. The CommandLine::is_mmio_enabled method was renamed to CommandLine::is_pci_ecam_enabled to better represent the meaning of this method and what it determines. Also, an UNMAP_AFTER_INIT macro was removed from a method in the MMIOAccess class as it halted the system when the kernel tried to access devices after the boot process.
2021-03-23Revert "Kernel/AHCI: Add a boot argument to force AHCI to operate on IRQ 11"Liav A
This reverts commit cfc2f33dcba18e2afaeeba6c6158269cb9abea30. We can't actually change the IRQ line value and expect the device to work with it (this was my mistake). That register is R/W so the firmware can figure out IRQ routing and put the correct value and write it to the Interrupt line register.
2021-03-21Kernel/AHCI: Add a boot argument to force AHCI to operate on IRQ 11Liav A
As a compromise, if the fimrware decided to set the IRQ line to be 7, or something else we can't deal with, the user can simply force the code to work with IRQ 11, with the boot argument "force_ahci_irq_11" being set to "on".
2021-03-13Kernel: Don't reset AHCI ports during boot unless requestedLiav A
Instead of blindly resetting every AHCI port, let's just reset only the controller by default. The user can still request to reset everything with a new kernel boot argument called ahci_reset_mode which is set by default to "controller", so the code will only invoke an HBA reset. This kernel boot argument can be set to 3 different values: 1. "controller" - reset the HBA and skip resetting AHCI ports 2. "none" - don't reset anything, so we rely on the firmware to initialize the AHCI HBA and ports for us. 3. "complete" - reset the AHCI HBA and ports.
2021-03-03Kernel: Add 'boot_prof' option to enable full system profiling on bootBrian Gianforcaro
The full system profiling functionality is useful for profiling the boot performance of the system. Add a new kernel boot option to start the system with profiling enabled. This lets you disable and view a profile once the system is booted. You can use it by running: ``` $ run.sh qcmd boot_prof ```
2021-03-03Kernel: Move Kernel CommandLine parsing to strongly typed API.Brian Gianforcaro
Previously all of the CommandLine parsing was spread out around the Kernel. Instead move it all into the Kernel CommandLine class, and expose a strongly typed API for querying the state of options.
2021-02-23Everywhere: Rename ASSERT => VERIFYAndreas Kling
(...and ASSERT_NOT_REACHED => VERIFY_NOT_REACHED) Since all of these checks are done in release builds as well, let's rename them to VERIFY to prevent confusion, as everyone is used to assertions being compiled out in release. We can introduce a new ASSERT macro that is specifically for debug checks, but I'm doing this wholesale conversion first since we've accumulated thousands of these already, and it's not immediately obvious which ones are suitable for ASSERT.
2021-02-19Kernel: Slap UNMAP_AFTER_INIT on a bunch more functionsAndreas Kling
We're now able to unmap 100 KiB of kernel text after init. :^)
2020-09-25Meta+Kernel: Make clang-format-10 cleanBen Wiederhake
2020-08-25Kernel: Copy command line to a safe placeTom
This avoids kmalloc overwriting it because it may be within the kmalloc or eternal pool.
2020-08-25Kernel: Switch singletons to use new Singleton classTom
MemoryManager cannot use the Singleton class because MemoryManager::initialize is called before the global constructors are run. That caused the Singleton to be re-initialized, causing it to create another MemoryManager instance. Fixes #3226
2020-08-23Kernel: Avoid some allocations in command line parsing (#3213)Muhammad Zahalqa
1. Preallocate args hashmap to prevent rehashing. 2. Use move to prevent string copies.
2020-08-22Revert "AK: Get rid of make_singleton function"Andreas Kling
This reverts commit 5a98e329d157a2db8379e0c97c6bdc1328027843.
2020-08-22Revert "Kernel: Copy command line to a safe place"Andreas Kling
This reverts commit 41c005cb140c8a9ae94e6b68456d8d6f1d925a8f.
2020-08-22Kernel: Copy command line to a safe placeTom
This avoids kmalloc overwriting it because it may be within the kmalloc or eternal pool.
2020-08-22AK: Get rid of make_singleton functionTom
Just default the InitFunction template argument.
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-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: Rename KParams => Kernel::CommandLineAndreas Kling
Let's make this read more like English.