xref: /aosp_15_r20/external/vboot_reference/tests/common/boot_mode.c (revision 8617a60d3594060b7ecbd21bc622a7c14f3cf2bc)
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