blob: d799f27f692dda47e9ed31df15238425eee3d0fe [file] [log] [blame]
// Copyright 2020 The Fuchsia Authors
//
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file or at
// https://opensource.org/licenses/MIT
#ifndef ZIRCON_KERNEL_LIB_BOOT_OPTIONS_INCLUDE_LIB_BOOT_OPTIONS_TYPES_H_
#define ZIRCON_KERNEL_LIB_BOOT_OPTIONS_INCLUDE_LIB_BOOT_OPTIONS_TYPES_H_
#include <zircon/limits.h>
#include <array>
#include <optional>
#include <string_view>
// This declares special types used for BootOptions members. These, as well
// as std::string_view, bool, and uintNN_t, can be used in DEFINE_OPTIONS in
// "options.inc".
#if BOOT_OPTIONS_GENERATOR || defined(__aarch64__)
// This declares special types used by machine-specific options in "arm64.inc".
#include "arm64.h"
#endif
#if BOOT_OPTIONS_GENERATOR || defined(__x86_64__)
// This declares special types used by machine-specific options in "x86.inc".
#include "x86.h"
#endif
// This holds a C string always guaranteed to have a '\0' terminator. As a
// simple invariant, SmallString::back() == '\0' is always maintained even if
// there is an earlier terminator.
using SmallString = std::array<char, 160>;
// This is used for passing in secure random bits as ASCII hex digits. As a
// special exception to the normal constraint that the command line text be
// left as is in the ZBI item memory, the original command line text of the
// RedactedHex option's value is redacted (the buffer modified in place) so it
// does not propagate to userland.
struct RedactedHex {
constexpr const char* c_str() const { return hex.data(); }
constexpr explicit operator std::string_view() const { return {hex.data(), len}; }
constexpr bool operator==(const RedactedHex& other) const {
return std::string_view(*this) == std::string_view(other);
}
constexpr bool operator!=(const RedactedHex& other) const { return !(*this == other); }
SmallString hex{};
size_t len = 0;
};
// See kernel.oom.behavior.
enum class OomBehavior { kReboot, kJobKill };
// See kernel.entropy-test.len.
constexpr uint64_t kMaxEntropyLength = 1u << 20;
// See kernel.entropy-test.src.
enum class EntropyTestSource { kHwRng, kJitterEntropy };
// See kernel.page-scanner.eviction_policy.
enum class PageTableEvictionPolicy { kOnRequest, kNever, kAlways };
// See gfxconsole.font.
enum class GfxConsoleFont { k9x16, k18x32 };
// See kernel.enable-serial-syscalls.
enum class SerialDebugSyscalls {
kDisabled,
kEnabled,
kOutputOnly,
};
// See kernel.root-job.behavior.
enum class RootJobBehavior {
kHalt,
kReboot,
kBootloader,
kRecovery,
kShutdown,
};
// Wallclock options.
enum class WallclockType {
kAutoDetect,
kTsc,
kPit,
kHpet,
};
// See kernel.test.ram.reserve.
struct RamReservation {
std::optional<uint64_t> paddr;
uint64_t size;
};
constexpr bool operator==(const RamReservation& lhs, const RamReservation& rhs) {
return lhs.paddr == rhs.paddr && lhs.size == rhs.size;
}
constexpr bool operator!=(const RamReservation& lhs, const RamReservation& rhs) {
return !(lhs == rhs);
}
// List of command lines argument names that are explicitly referenced in code.
// TODO(fxb/74740): remove all usages of this.
constexpr std::string_view kForceWatchdogDisabledName = "kernel.force-watchdog-disabled";
constexpr std::string_view kPageScannerEnableEvictionName = "kernel.page-scanner.enable-eviction";
constexpr std::string_view kPmmCheckerActionName = "kernel.pmm-checker.action";
constexpr std::string_view kPmmCheckerFillSizeName = "kernel.pmm-checker.fill-size";
constexpr std::string_view kRootJobBehaviorHaltName = "halt";
constexpr std::string_view kRootJobBehaviorRebootName = "reboot";
constexpr std::string_view kRootJobBehaviorBootloaderName = "bootloader";
constexpr std::string_view kRootJobBehaviorRecoveryName = "recovery";
constexpr std::string_view kRootJobBehaviorShutdownName = "shutdown";
#endif // ZIRCON_KERNEL_LIB_BOOT_OPTIONS_INCLUDE_LIB_BOOT_OPTIONS_TYPES_H_