/* Copyright 2022 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. * * Some helper function related to boot mode. */ #include "2api.h" #include "2misc.h" #include "2nvstorage.h" #include "common/boot_mode.h" #include "common/tests.h" void _set_boot_mode(struct vb2_context *ctx, enum vb2_boot_mode boot_mode, uint32_t recovery_reason, ...) { struct vb2_shared_data *sd = vb2_get_sd(ctx); switch (boot_mode) { case VB2_BOOT_MODE_MANUAL_RECOVERY: TEST_NEQ(recovery_reason, 0, "recovery_reason should be set in recovery mode"); ctx->flags |= VB2_CONTEXT_RECOVERY_MODE; sd->recovery_reason = recovery_reason; ctx->flags |= VB2_CONTEXT_FORCE_RECOVERY_MODE; ctx->flags |= VB2_CONTEXT_EC_TRUSTED; break; case VB2_BOOT_MODE_BROKEN_SCREEN: TEST_NEQ(recovery_reason, 0, "recovery_reason should be set in recovery mode"); ctx->flags |= VB2_CONTEXT_RECOVERY_MODE; sd->recovery_reason = recovery_reason; break; case VB2_BOOT_MODE_DIAGNOSTICS: vb2_nv_set(ctx, VB2_NV_DIAG_REQUEST, 1); break; case VB2_BOOT_MODE_DEVELOPER: ctx->flags |= VB2_CONTEXT_DEVELOPER_MODE; break; case VB2_BOOT_MODE_NORMAL: break; default: TEST_TRUE(0, "SET_BOOT_MODE: Undefined boot mode"); return; } vb2_set_boot_mode(ctx); TEST_EQ(ctx->boot_mode, boot_mode, "Validity check for set boot mode"); }