summaryrefslogtreecommitdiff
path: root/Kernel/CommandLine.cpp
AgeCommit message (Collapse)Author
2022-10-24AK+Everywhere: Turn bool keep_empty to an enum in split* functionsdemostanis
2022-09-20Kernel/PCI: Don't use x86 initialization methods in non-x86 buildsLiav A
Using the IO address space is only relevant for x86 machines, so let's not compile instructions to access the PCI configuration space when we don't target x86 platforms.
2022-09-18Kernel: Replace KString::must_create, fix init_argsBen Wiederhake
2022-08-30Kernel/Storage: Introduce new boot device addressing modesLiav A
Before of this patch, we supported two methods to address a boot device: 1. Specifying root=/dev/hdXY, where X is a-z letter which corresponds to a boot device, and Y as number from 1 to 16, to indicate the partition number, which can be omitted to instruct the kernel to use a raw device rather than a partition on a raw device. 2. Specifying root=PARTUUID: with a GUID string of a GUID partition. In case of existing storage device with GPT partitions, this is most likely the safest option to ensure booting from persistent storage. While option 2 is more advanced and reliable, the first option has 2 caveats: 1. The string prefix "/dev/hd" doesn't mean anything beside a convention on Linux installations, that was taken into use in Serenity. In Serenity we don't mount DevTmpFS before we mount the boot device on /, so the kernel doesn't really access /dev anyway, so this convention is only a big misleading relic that can easily make the user to assume we access /dev early on boot. 2. This convention although resemble the simple linux convention, is quite limited in specifying a correct boot device across hardware setup changes, so option 2 was recommended to ensure the system is always bootable. With these caveats in mind, this commit tries to fix the problem with adding more addressing options as well as to remove the first option being mentioned above of addressing. To sum it up, there are 4 addressing options: 1. Hardware relative address - Each instance of StorageController is assigned with a index number relative to the type of hardware it handles which makes it possible to address storage devices with a prefix of the commandset ("ata" for ATA, "nvme" for NVMe, "ramdisk" for Plain memory), and then the number for the parent controller relative hardware index, another number LUN target_id, and a third number for LUN disk_id. 2. LUN address - Similar to the previous option, but instead we rely on the parent controller absolute index for the first number. 3. Block device major and minor numbers - by specifying the major and minor numbers, the kernel can simply try to get the corresponding block device and use it as the boot device. 4. GUID string, in the same fashion like before, so the user use the "PARTUUID:" string prefix and add the GUID of the GPT partition. For the new address modes 1 and 2, the user can choose to also specify a partition out of the selected boot device. To do that, the user needs to append the semicolon character and then add the string "partX" where X is to be changed for the partition number. We start counting from 0, and therefore the first partition number is 0 and not 1 in the kernel boot argument.
2022-08-14Kernel/Commandline: Remove a remainder of the removed boot_mode flagLiav A
2022-08-14Everywhere: Get rid of the fbdev kernel boot argument remaindersLiav A
2022-07-12Everywhere: Replace single-char StringView op. arguments with charssin-ack
This prevents us from needing a sv suffix, and potentially reduces the need to run generic code for a single character (as contains, starts_with, ends_with etc. for a char will be just a length and equality check). 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-07-12Everywhere: Explicitly specify the size in StringView constructorssin-ack
This commit moves the length calculations out to be directly on the StringView users. This is an important step towards the goal of removing StringView(char const*), as it moves the responsibility of calculating the size of the string to the user of the StringView (which will prevent naive uses causing OOB access).
2022-05-05Kernel/Graphics: Simplify the feature level of the Graphics subsystemLiav A
Instead of letting the user to determine whether framebuffer devices will be created (which is useless because they are gone by now), let's simplify the flow by allowing the user to choose between full, limited or disabled functionality. The determination happens only once, so, if the user decided to disable graphics support, the initialize method exits immediately. If limited functionality is chosen, then a generic DisplayConnector is initialized with the preset framebuffer resolution, if present, and then the initialize method exits. As a default, the code proceeds to initialize all drivers as usual.
2022-04-01Everywhere: Run clang-formatIdan Horowitz
2022-03-18Kernel: Allow to disable early boot consoleLiav A
This aid debugging on bare metal when we suspect that the boot console does something wrong that interferes with other kernel components.
2022-03-02Kernel: Change PCI access commandline option to also represent no accessLiav A
This change allow the user to request the kernel to not use any PCI resources/devices at all. Also, don't try to initialize devices that rely on PCI if disabled.
2022-02-02Kernel: Add nvme_poll command line parametersPankaj Raghav
As we don't currently support MSI(X) interrupts, it could be an issue to boot on some newer hardware. NVMe devices support polling mode where the driver actively polls for completion instead of waiting for an interrupt.
2022-01-23Kernel: Add CommandLine option to disable or enable the PC speakerLiav A
By default, we disable the PC speaker as it's quite annoying when using the text mode console.
2022-01-21Kernel: Ensure that CommandLine is initialized before choosing PanicModeLiav A
If the kernel commandline is not initialized, just halt everything.
2022-01-12Kernel: Convert CommandLine to KStringIdan Horowitz
2022-01-06Kernel: Add option to force using only the bootloader framebufferTom
This allows forcing the use of only the framebuffer set up by the bootloader and skips instantiating devices for any other graphics cards that may be present.
2022-01-05Kernel: Use MUST+ Vector::try_prepend instead of Vector::prependBrian Gianforcaro
In preparation for disabling Vector::prepend from being available during the compilation of the Kernel.
2021-12-30Kernel: Remove else-after-return statements in CommandLine.cppHendiadyoin1
2021-12-30Kernel: Remove superfluous moves in CommandLine.cppHendiadyoin1
2021-12-20Kernel: Ensure SMP mode is not enabled if IOAPIC mode is disabledLiav A
We need to use the IOAPIC in SMP mode, so if the user requested to disable it, we can't enable SMP mode either.
2021-12-14Kernel: Allow switching to IOAPIC mode even without enabling SMPLiav A
This small change allows to use the IOAPIC by default without to enable SMP mode, which emulates Uni-Processor setup with IOAPIC instead of using the PIC. This opens the opportunity to utilize other types of interrupts like MSI and MSI-X interrupts.
2021-11-11Everywhere: Pass AK::StringView by valueAndreas Kling
2021-10-25Kernel: Avoid allocation when checking for vmmouseBen Wiederhake
2021-10-25Kernel+SystemServer: Change bootmode to system_modeBen Wiederhake
'bootmode' now only controls which set of services are started by SystemServer, so it is more appropriate to rename it to system_mode, and no longer validate it in the Kernel.
2021-10-25Kernel: Separate panic behavior from bootmodeBen Wiederhake
Bootmode used to control panic behavior and SystemServer. This patch factors panic behavior control into a separate flag.
2021-10-25Kernel: Separate framebuffers from bootmodeBen Wiederhake
Bootmode used to control framebuffers, panic behavior, and SystemServer. This patch factors framebuffer control into a separate flag. Note that the combination 'bootmode=self-test fbdev=on' leads to unexpected behavior, which can only be fixed in a later commit.
2021-10-08Kernel: Fix -Wunreachable-code warnings from clangNico Weber
2021-09-10Kernel/CommandLine: Verify ACPI feature level cannot have invalid stringLiav A
The allowed options are "on", "limited" and "off". Anything else is now not allowed and will result in kernel panic.
2021-09-10Kernel/ACPI: Simplify parser initializationLiav A
Let's remove the DynamicParser class, as it really did nothing yet in the Kernel. Instead, when we add support for AML parsing, we can figure out how to do it properly without the need of a derived class that just complicates everything for no good reason.
2021-09-09Kernel: Use KString all the way in sys$execve()Andreas Kling
This patch converts all the usage of AK::String around sys$execve() to using KString instead, allowing us to catch and propagate OOM errors. It also required changing the kernel CommandLine helper class to return a vector of KString for the userspace init program arguments.
2021-09-07Kernel/PCI: Turn on memory access by defaultLiav A
This will allow the Kernel to utilize memory access to the PCI configuration space if such method is available.
2021-09-07Kernel/PCI: Simplify the entire subsystemLiav A
A couple of things were changed: 1. Semantic changes - PCI segments are now called PCI domains, to better match what they are really. It's also the name that Linux gave, and it seems that Wikipedia also uses this name. We also remove PCI::ChangeableAddress, because it was used in the past but now it's no longer being used. 2. There are no WindowedMMIOAccess or MMIOAccess classes anymore, as they made a bunch of unnecessary complexity. Instead, Windowed access is removed entirely (this was tested, but never was benchmarked), so we are left with IO access and memory access options. The memory access option is essentially mapping the PCI bus (from the chosen PCI domain), to virtual memory as-is. This means that unless needed, at any time, there is only one PCI bus being mapped, and this is changed if access to another PCI bus in the same PCI domain is needed. For now, we don't support mapping of different PCI buses from different PCI domains at the same time, because basically it's still a non-issue for most machines out there. 2. OOM-safety is increased, especially when constructing the Access object. It means that we pre-allocating any needed resources, and we try to find PCI domains (if requested to initialize memory access) after we attempt to construct the Access object, so it's possible to fail at this point "gracefully". 3. All PCI API functions are now separated into a different header file, which means only "clients" of the PCI subsystem API will need to include that header file. 4. Functional changes - we only allow now to enumerate the bus after a hardware scan. This means that the old method "enumerate_hardware" is removed, so, when initializing an Access object, the initializing function must call rescan on it to force it to find devices. This makes it possible to fail rescan, and also to defer it after construction from both OOM-safety terms and hotplug capabilities.
2021-08-18AK+Kernel: StringView hash map Traits should not set peek type to StringBrian Gianforcaro
This typo / bug in the Traits<T> implementation for StringView caused AK::HashMap methods to return a `String` when looking up values out of a hash map of type HashTable<StringView,StringView>. This change fixes the typo, and fixes the only consumer, the kernel Commandline class.
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.