ladybird/Kernel/CommandLine.h
Daniel Bertalan 6aa392f6e4 Kernel: Store the kernel command line in a StringView
The Raspberry Pi's mailbox interface does not guarantee that the
returned command line is null-terminated. This commit removes that
assumption from the current code, allowing the next commit to add
support for reading it on the Pi.

This also lets us eliminate a few manual `strlen()` calls :^)
2023-04-29 08:24:18 +02:00

117 lines
3.1 KiB
C++

/*
* 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/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();
}