Serenity Operating System
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}