Serenity Operating System
at master 116 lines 3.1 kB view raw
1/* 2 * Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org> 3 * 4 * SPDX-License-Identifier: BSD-2-Clause 5 */ 6 7#pragma once 8 9#include <AK/HashMap.h> 10#include <AK/Optional.h> 11#include <AK/Vector.h> 12#include <Kernel/KString.h> 13 14namespace Kernel { 15 16enum class PanicMode { 17 Halt, 18 Shutdown, 19}; 20 21enum class HPETMode { 22 Periodic, 23 NonPeriodic 24}; 25 26enum class I8042PresenceMode { 27 Automatic, 28 AggressiveTest, 29 Force, 30 None, 31}; 32 33enum class AcpiFeatureLevel { 34 Enabled, 35 Limited, 36 Disabled, 37}; 38 39enum class PCIAccessLevel { 40 None, 41#if ARCH(X86_64) 42 IOAddressing, 43#endif 44 MemoryAddressing, 45}; 46 47enum class AHCIResetMode { 48 ControllerOnly, 49 Aggressive, 50}; 51 52class CommandLine { 53 54public: 55 static void early_initialize(char const* cmd_line); 56 static void initialize(); 57 static bool was_initialized(); 58 59 enum class Validate { 60 Yes, 61 No, 62 }; 63 64 enum class GraphicsSubsystemMode { 65 Enabled, 66 Limited, 67 Disabled 68 }; 69 70 [[nodiscard]] StringView string() const { return m_string->view(); } 71 Optional<StringView> lookup(StringView key) const; 72 [[nodiscard]] bool contains(StringView key) const; 73 74 [[nodiscard]] bool is_boot_profiling_enabled() const; 75 [[nodiscard]] bool is_ide_enabled() const; 76 [[nodiscard]] bool is_ioapic_enabled() const; 77 [[nodiscard]] bool is_smp_enabled_without_ioapic_enabled() const; 78 [[nodiscard]] bool is_smp_enabled() const; 79 [[nodiscard]] bool is_physical_networking_disabled() const; 80 [[nodiscard]] bool is_vmmouse_enabled() const; 81 [[nodiscard]] PCIAccessLevel pci_access_level() const; 82 [[nodiscard]] bool is_pci_disabled() const; 83 [[nodiscard]] bool is_legacy_time_enabled() const; 84 [[nodiscard]] bool is_pc_speaker_enabled() const; 85 [[nodiscard]] GraphicsSubsystemMode graphics_subsystem_mode() const; 86 [[nodiscard]] I8042PresenceMode i8042_presence_mode() const; 87 [[nodiscard]] bool is_force_pio() const; 88 [[nodiscard]] AcpiFeatureLevel acpi_feature_level() const; 89 [[nodiscard]] StringView system_mode() const; 90 [[nodiscard]] PanicMode panic_mode(Validate should_validate = Validate::No) const; 91 [[nodiscard]] HPETMode hpet_mode() const; 92 [[nodiscard]] bool disable_physical_storage() const; 93 [[nodiscard]] bool disable_uhci_controller() const; 94 [[nodiscard]] bool disable_usb() const; 95 [[nodiscard]] bool disable_virtio() const; 96 [[nodiscard]] bool is_early_boot_console_disabled() const; 97 [[nodiscard]] AHCIResetMode ahci_reset_mode() const; 98 [[nodiscard]] StringView userspace_init() const; 99 [[nodiscard]] Vector<NonnullOwnPtr<KString>> userspace_init_args() const; 100 [[nodiscard]] StringView root_device() const; 101 [[nodiscard]] bool is_nvme_polling_enabled() const; 102 [[nodiscard]] size_t switch_to_tty() const; 103 104private: 105 CommandLine(StringView); 106 107 void add_arguments(Vector<StringView> const& args); 108 static NonnullOwnPtr<KString> build_commandline(StringView cmdline_from_bootloader); 109 110 NonnullOwnPtr<KString> m_string; 111 HashMap<StringView, StringView> m_params; 112}; 113 114CommandLine const& kernel_command_line(); 115 116}