// Copyright 2020 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef ZIRCON_BOOT_CRASH_REASON_H_
#define ZIRCON_BOOT_CRASH_REASON_H_

#include <stdint.h>
#include <zircon/compiler.h>

// 0 is reserved for "Invalid".  It will never be used by a functioning
// crash-logger.
#define ZIRCON_CRASH_REASON_INVALID ((uint32_t)0)

// "Unknown" indicates that the system does not know the reason for a recent
// crash.  The primary use of this reason is to be something which can be left
// in the crashlog in case the system spontaneously reboots without a chance to
// gracefully finalize the log, perhaps because of something like a hardware
// watchdog timer.
#define ZIRCON_CRASH_REASON_UNKNOWN ((uint32_t)1)

// "No Crash" indicates that the system deliberately rebooted in an
// orderly fashion.  No crash occurred.
#define ZIRCON_CRASH_REASON_NO_CRASH ((uint32_t)2)

// "OOM" indicates a crash triggered by the system because of an unrecoverable
// out-of-memory situation.
#define ZIRCON_CRASH_REASON_OOM ((uint32_t)3)

// "Panic" indicates a crash triggered by the system because of an unrecoverable
// kernel panic situation.
#define ZIRCON_CRASH_REASON_PANIC ((uint32_t)4)

// "Software watchdog" indicates a crash triggered by a kernel level software
// watchdog construct.  Note that this is distinct from a hardware based WDT.
// If the system reboots because of a hardware watchdog, it will have no chance
// to record the reboot reason, and the crashlog will indicate "unknown".  The
// HW reboot reason may be known, but only if the bootloader reports it to us.
#define ZIRCON_CRASH_REASON_SOFTWARE_WATCHDOG ((uint32_t)5)

// "Userspace root job termination" indicates a crash triggered by the system
// because it detected the termination of the userspace root job, most likely
// because one its critical processes crashed.
#define ZIRCON_CRASH_REASON_USERSPACE_ROOT_JOB_TERMINATION ((uint32_t)6)

#ifndef __ASSEMBLER__
#if !__cplusplus
typedef uint32_t zircon_crash_reason_t;
#else   // !__cplusplus
enum class ZirconCrashReason : uint32_t {
  Invalid = ZIRCON_CRASH_REASON_INVALID,
  Unknown = ZIRCON_CRASH_REASON_UNKNOWN,
  NoCrash = ZIRCON_CRASH_REASON_NO_CRASH,
  Oom = ZIRCON_CRASH_REASON_OOM,
  Panic = ZIRCON_CRASH_REASON_PANIC,
  SoftwareWatchdog = ZIRCON_CRASH_REASON_SOFTWARE_WATCHDOG,
  UserspaceRootJobTermination = ZIRCON_CRASH_REASON_USERSPACE_ROOT_JOB_TERMINATION,
};

// Using alias to maintain compatibility with APIs meant to be used by both C and C++.
using zircon_crash_reason_t = ZirconCrashReason;
#endif  // !__cplusplus
#endif  // __ASSEMBLER__

#endif  // ZIRCON_BOOT_CRASH_REASON_H_
