summaryrefslogtreecommitdiff
path: root/Kernel/CommandLine.h
blob: a52e2daa35ee1416d518b7bc86a68d515df39b54 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
/*
 * Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org>
 *
 * SPDX-License-Identifier: BSD-2-Clause
 */

#pragma once

#include <AK/HashMap.h>
#include <AK/NonnullOwnPtrVector.h>
#include <AK/Optional.h>
#include <AK/Vector.h>
#include <Kernel/KString.h>

namespace Kernel {

enum class PanicMode {
    Halt,
    Shutdown,
};

enum class HPETMode {
    Periodic,
    NonPeriodic
};

enum class AcpiFeatureLevel {
    Enabled,
    Limited,
    Disabled,
};

enum class PCIAccessLevel {
    None,
    IOAddressing,
    MemoryAddressing,
};

enum class AHCIResetMode {
    ControllerOnly,
    Aggressive,
};

class CommandLine {

public:
    static void early_initialize(char const* cmd_line);
    static void initialize();
    static bool was_initialized();

    enum class Validate {
        Yes,
        No,
    };

    enum class FrameBufferDevices {
        Enabled,
        ConsoleOnly,
        BootloaderOnly
    };

    [[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]] FrameBufferDevices are_framebuffer_devices_enabled() 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_ps2_controller() 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]] NonnullOwnPtrVector<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();

}