summaryrefslogtreecommitdiff
path: root/Kernel/Boot/CommandLine.h
diff options
context:
space:
mode:
Diffstat (limited to 'Kernel/Boot/CommandLine.h')
-rw-r--r--Kernel/Boot/CommandLine.h116
1 files changed, 116 insertions, 0 deletions
diff --git a/Kernel/Boot/CommandLine.h b/Kernel/Boot/CommandLine.h
new file mode 100644
index 0000000000..98395eab2e
--- /dev/null
+++ b/Kernel/Boot/CommandLine.h
@@ -0,0 +1,116 @@
+/*
+ * Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org>
+ *
+ * SPDX-License-Identifier: BSD-2-Clause
+ */
+
+#pragma once
+
+#include <AK/HashMap.h>
+#include <AK/Optional.h>
+#include <AK/Vector.h>
+#include <Kernel/Library/KString.h>
+
+namespace Kernel {
+
+enum class PanicMode {
+ Halt,
+ Shutdown,
+};
+
+enum class HPETMode {
+ Periodic,
+ NonPeriodic
+};
+
+enum class I8042PresenceMode {
+ Automatic,
+ AggressiveTest,
+ Force,
+ None,
+};
+
+enum class AcpiFeatureLevel {
+ Enabled,
+ Limited,
+ Disabled,
+};
+
+enum class PCIAccessLevel {
+ None,
+#if ARCH(X86_64)
+ IOAddressing,
+#endif
+ MemoryAddressing,
+};
+
+enum class AHCIResetMode {
+ ControllerOnly,
+ Aggressive,
+};
+
+class CommandLine {
+
+public:
+ static void early_initialize(StringView cmd_line);
+ static void initialize();
+ static bool was_initialized();
+
+ enum class Validate {
+ Yes,
+ No,
+ };
+
+ enum class GraphicsSubsystemMode {
+ Enabled,
+ Limited,
+ Disabled
+ };
+
+ [[nodiscard]] StringView string() const { return m_string->view(); }
+ Optional<StringView> lookup(StringView key) const;
+ [[nodiscard]] bool contains(StringView key) const;
+
+ [[nodiscard]] bool is_boot_profiling_enabled() const;
+ [[nodiscard]] bool is_ide_enabled() const;
+ [[nodiscard]] bool is_ioapic_enabled() const;
+ [[nodiscard]] bool is_smp_enabled_without_ioapic_enabled() const;
+ [[nodiscard]] bool is_smp_enabled() const;
+ [[nodiscard]] bool is_physical_networking_disabled() const;
+ [[nodiscard]] bool is_vmmouse_enabled() const;
+ [[nodiscard]] PCIAccessLevel pci_access_level() const;
+ [[nodiscard]] bool is_pci_disabled() const;
+ [[nodiscard]] bool is_legacy_time_enabled() const;
+ [[nodiscard]] bool is_pc_speaker_enabled() const;
+ [[nodiscard]] GraphicsSubsystemMode graphics_subsystem_mode() const;
+ [[nodiscard]] I8042PresenceMode i8042_presence_mode() const;
+ [[nodiscard]] bool is_force_pio() const;
+ [[nodiscard]] AcpiFeatureLevel acpi_feature_level() const;
+ [[nodiscard]] StringView system_mode() const;
+ [[nodiscard]] PanicMode panic_mode(Validate should_validate = Validate::No) const;
+ [[nodiscard]] HPETMode hpet_mode() const;
+ [[nodiscard]] bool disable_physical_storage() const;
+ [[nodiscard]] bool disable_uhci_controller() const;
+ [[nodiscard]] bool disable_usb() const;
+ [[nodiscard]] bool disable_virtio() const;
+ [[nodiscard]] bool is_early_boot_console_disabled() const;
+ [[nodiscard]] AHCIResetMode ahci_reset_mode() const;
+ [[nodiscard]] StringView userspace_init() const;
+ [[nodiscard]] Vector<NonnullOwnPtr<KString>> userspace_init_args() const;
+ [[nodiscard]] StringView root_device() const;
+ [[nodiscard]] bool is_nvme_polling_enabled() const;
+ [[nodiscard]] size_t switch_to_tty() const;
+
+private:
+ CommandLine(StringView);
+
+ void add_arguments(Vector<StringView> const& args);
+ static NonnullOwnPtr<KString> build_commandline(StringView cmdline_from_bootloader);
+
+ NonnullOwnPtr<KString> m_string;
+ HashMap<StringView, StringView> m_params;
+};
+
+CommandLine const& kernel_command_line();
+
+}