blob: 0f26919ce261b263a105287c69d2b9e8d9be04b3 [file] [log] [blame]
// Copyright 2019 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_USERABI_INCLUDE_LIB_USERABI_USERBOOT_H_
#define ZIRCON_KERNEL_LIB_USERABI_INCLUDE_LIB_USERABI_USERBOOT_H_
// This file specifies the private ABI shared between userboot and the kernel.
// That is, the contents of the message sent on userboot's bootstrap channel.
#include <lib/instrumentation/vmo.h>
#include <cstdint>
namespace userboot {
// This is only here for the count. No userboot code cares which is which
// except that the stable (default) variant is first and that kLastVdso (below)
// is correct.
//
// TODO(fxbug.dev/95763): Ideally, what we'd like is an alternate version of
// every vDSO, where `syscall` is replaced with `vmcall`. For now, we have have
// have a single `DIRECT` vDSO, that is an alternate version of `STABLE`.
enum class VdsoVariant { STABLE, NEXT, DIRECT, TEST1, TEST2, COUNT };
// The handles in the bootstrap message are as follows:
enum HandleIndex : uint32_t {
// These describe userboot itself.
kProcSelf,
kVmarRootSelf,
// Essential job and resource handles.
kRootJob,
kRootResource,
kMmioResource,
kIrqResource,
#if __x86_64__
kIoportResource,
#elif __aarch64__
kSmcResource,
#endif
kSystemResource,
// Essential VMO handles.
kZbi,
kFirstVdso,
kLastVdso = kFirstVdso + static_cast<uint32_t>(VdsoVariant::COUNT) - 1,
// These get passed along to userland to be recognized by ZX_PROP_NAME.
// The remainder are VMO handles that userboot doesn't care about.
kCrashlog,
kFirstKernelFile = kCrashlog,
kBootOptions,
kCounterNames,
kCounters,
#if ENABLE_ENTROPY_COLLECTOR_TEST
kEntropyTestData,
#endif
kFirstInstrumentationData,
kHandleCount = kFirstInstrumentationData + InstrumentationData::vmo_count()
};
// Copied from sdk/lib/fdio/include/lib/fdio/io.h to avoid the dependency. When this is passed
// with a PA_FD handle, the handle is tied to stdout.
constexpr uint32_t kFdioFlagUseForStdio = 0x8000;
// Max number of bytes allowed for arguments to the userboot.next binary. This is an arbitrary
// value.
constexpr uint32_t kProcessArgsMaxBytes = 128;
} // namespace userboot
#endif // ZIRCON_KERNEL_LIB_USERABI_INCLUDE_LIB_USERABI_USERBOOT_H_