1*8617a60dSAndroid Build Coastguard Worker /* Copyright 2022 The ChromiumOS Authors
2*8617a60dSAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license that can be
3*8617a60dSAndroid Build Coastguard Worker * found in the LICENSE file.
4*8617a60dSAndroid Build Coastguard Worker *
5*8617a60dSAndroid Build Coastguard Worker * Some helper function related to boot mode.
6*8617a60dSAndroid Build Coastguard Worker */
7*8617a60dSAndroid Build Coastguard Worker
8*8617a60dSAndroid Build Coastguard Worker #include "2api.h"
9*8617a60dSAndroid Build Coastguard Worker #include "2misc.h"
10*8617a60dSAndroid Build Coastguard Worker #include "2nvstorage.h"
11*8617a60dSAndroid Build Coastguard Worker #include "common/boot_mode.h"
12*8617a60dSAndroid Build Coastguard Worker #include "common/tests.h"
13*8617a60dSAndroid Build Coastguard Worker
_set_boot_mode(struct vb2_context * ctx,enum vb2_boot_mode boot_mode,uint32_t recovery_reason,...)14*8617a60dSAndroid Build Coastguard Worker void _set_boot_mode(struct vb2_context *ctx, enum vb2_boot_mode boot_mode,
15*8617a60dSAndroid Build Coastguard Worker uint32_t recovery_reason, ...)
16*8617a60dSAndroid Build Coastguard Worker {
17*8617a60dSAndroid Build Coastguard Worker struct vb2_shared_data *sd = vb2_get_sd(ctx);
18*8617a60dSAndroid Build Coastguard Worker
19*8617a60dSAndroid Build Coastguard Worker switch (boot_mode) {
20*8617a60dSAndroid Build Coastguard Worker case VB2_BOOT_MODE_MANUAL_RECOVERY:
21*8617a60dSAndroid Build Coastguard Worker TEST_NEQ(recovery_reason, 0,
22*8617a60dSAndroid Build Coastguard Worker "recovery_reason should be set in recovery mode");
23*8617a60dSAndroid Build Coastguard Worker ctx->flags |= VB2_CONTEXT_RECOVERY_MODE;
24*8617a60dSAndroid Build Coastguard Worker sd->recovery_reason = recovery_reason;
25*8617a60dSAndroid Build Coastguard Worker ctx->flags |= VB2_CONTEXT_FORCE_RECOVERY_MODE;
26*8617a60dSAndroid Build Coastguard Worker ctx->flags |= VB2_CONTEXT_EC_TRUSTED;
27*8617a60dSAndroid Build Coastguard Worker break;
28*8617a60dSAndroid Build Coastguard Worker case VB2_BOOT_MODE_BROKEN_SCREEN:
29*8617a60dSAndroid Build Coastguard Worker TEST_NEQ(recovery_reason, 0,
30*8617a60dSAndroid Build Coastguard Worker "recovery_reason should be set in recovery mode");
31*8617a60dSAndroid Build Coastguard Worker ctx->flags |= VB2_CONTEXT_RECOVERY_MODE;
32*8617a60dSAndroid Build Coastguard Worker sd->recovery_reason = recovery_reason;
33*8617a60dSAndroid Build Coastguard Worker break;
34*8617a60dSAndroid Build Coastguard Worker case VB2_BOOT_MODE_DIAGNOSTICS:
35*8617a60dSAndroid Build Coastguard Worker vb2_nv_set(ctx, VB2_NV_DIAG_REQUEST, 1);
36*8617a60dSAndroid Build Coastguard Worker break;
37*8617a60dSAndroid Build Coastguard Worker case VB2_BOOT_MODE_DEVELOPER:
38*8617a60dSAndroid Build Coastguard Worker ctx->flags |= VB2_CONTEXT_DEVELOPER_MODE;
39*8617a60dSAndroid Build Coastguard Worker break;
40*8617a60dSAndroid Build Coastguard Worker case VB2_BOOT_MODE_NORMAL:
41*8617a60dSAndroid Build Coastguard Worker break;
42*8617a60dSAndroid Build Coastguard Worker default:
43*8617a60dSAndroid Build Coastguard Worker TEST_TRUE(0, "SET_BOOT_MODE: Undefined boot mode");
44*8617a60dSAndroid Build Coastguard Worker return;
45*8617a60dSAndroid Build Coastguard Worker }
46*8617a60dSAndroid Build Coastguard Worker vb2_set_boot_mode(ctx);
47*8617a60dSAndroid Build Coastguard Worker TEST_EQ(ctx->boot_mode, boot_mode, "Validity check for set boot mode");
48*8617a60dSAndroid Build Coastguard Worker }
49