| /* Copyright (c) 2014 The Chromium OS Authors. All rights reserved. | 
 |  * Use of this source code is governed by a BSD-style license that can be | 
 |  * found in the LICENSE file. | 
 |  * | 
 |  * Misc functions which need access to vb2_context but are not public APIs | 
 |  */ | 
 |  | 
 | #pragma once | 
 |  | 
 | #include "2api.h" | 
 |  | 
 | struct vb2_gbb_header; | 
 | struct vb2_workbuf; | 
 |  | 
 | /** | 
 |  * Get the shared data pointer from the vboot context | 
 |  * | 
 |  * @param ctx		Vboot context | 
 |  * @return The shared data pointer. | 
 |  */ | 
 | static __inline struct vb2_shared_data *vb2_get_sd(struct vb2_context *ctx) { | 
 | 	return (struct vb2_shared_data *)ctx->workbuf; | 
 | } | 
 |  | 
 | /** | 
 |  * Validate gbb signature (the magic number) | 
 |  * | 
 |  * @param sig		Pointer to the signature bytes to validate | 
 |  * @return VB2_SUCCESS if valid or non-zero if error. | 
 |  */ | 
 | int vb2_validate_gbb_signature(uint8_t *sig); | 
 |  | 
 | /** | 
 |  * Initialize a work buffer from the vboot context. | 
 |  * | 
 |  * This sets the work buffer to the unused portion of the context work buffer. | 
 |  * | 
 |  * @param ctx		Vboot context | 
 |  * @param wb		Work buffer to initialize | 
 |  */ | 
 | void vb2_workbuf_from_ctx(struct vb2_context *ctx, struct vb2_workbuf *wb); | 
 |  | 
 | /** | 
 |  * Read the GBB header. | 
 |  * | 
 |  * @param ctx		Vboot context | 
 |  * @param gbb		Destination for header | 
 |  * @return VB2_SUCCESS, or non-zero if error. | 
 |  */ | 
 | int vb2_read_gbb_header(struct vb2_context *ctx, struct vb2_gbb_header *gbb); | 
 |  | 
 | /** | 
 |  * Handle vboot failure. | 
 |  * | 
 |  * If the failure occurred after choosing a firmware slot, and the other | 
 |  * firmware slot is not known-bad, try the other firmware slot after reboot. | 
 |  * | 
 |  * If the failure occurred before choosing a firmware slot, or both slots have | 
 |  * failed in successive boots, request recovery. | 
 |  * | 
 |  * @param reason	Recovery reason | 
 |  * @param subcode	Recovery subcode | 
 |  */ | 
 | void vb2_fail(struct vb2_context *ctx, uint8_t reason, uint8_t subcode); | 
 |  | 
 | /** | 
 |  * Set up the verified boot context data, if not already set up. | 
 |  * | 
 |  * This uses ctx->workbuf_used=0 as a flag to indicate that the data has not | 
 |  * yet been set up.  Caller must set that before calling any voot functions; | 
 |  * see 2api.h. | 
 |  * | 
 |  * @param ctx		Vboot context to initialize | 
 |  * @return VB2_SUCCESS, or error code on error. | 
 |  */ | 
 | int vb2_init_context(struct vb2_context *ctx); | 
 |  | 
 | /** | 
 |  * Check for recovery reasons we can determine early in the boot process. | 
 |  * | 
 |  * On exit, check ctx->flags for VB2_CONTEXT_RECOVERY_MODE; if present, jump to | 
 |  * the recovery path instead of continuing with normal boot.  This is the only | 
 |  * direct path to recovery mode.  All other errors later in the boot process | 
 |  * should induce a reboot instead of jumping to recovery, so that recovery mode | 
 |  * starts from a consistent firmware state. | 
 |  * | 
 |  * @param ctx		Vboot context | 
 |  */ | 
 | void vb2_check_recovery(struct vb2_context *ctx); | 
 |  | 
 | /** | 
 |  * Parse the GBB header. | 
 |  * | 
 |  * @param ctx		Vboot context | 
 |  * @return VB2_SUCCESS, or error code on error. | 
 |  */ | 
 | int vb2_fw_parse_gbb(struct vb2_context *ctx); | 
 |  | 
 | /** | 
 |  * Check developer switch position. | 
 |  * | 
 |  * @param ctx		Vboot context | 
 |  * @return VB2_SUCCESS, or error code on error. | 
 |  */ | 
 | int vb2_check_dev_switch(struct vb2_context *ctx); | 
 |  | 
 | /** | 
 |  * Check if we need to clear the TPM owner. | 
 |  * | 
 |  * @param ctx		Vboot context | 
 |  * @return VB2_SUCCESS, or error code on error. | 
 |  */ | 
 | int vb2_check_tpm_clear(struct vb2_context *ctx); | 
 |  | 
 | /** | 
 |  * Decide which firmware slot to try this boot. | 
 |  * | 
 |  * @param ctx		Vboot context | 
 |  * @return VB2_SUCCESS, or error code on error. | 
 |  */ | 
 | int vb2_select_fw_slot(struct vb2_context *ctx); | 
 |  | 
 | /** | 
 |  * Verify the firmware keyblock using the root key. | 
 |  * | 
 |  * After this call, the data key is stored in the work buffer. | 
 |  * | 
 |  * @param ctx		Vboot context | 
 |  * @return VB2_SUCCESS, or error code on error. | 
 |  */ | 
 | int vb2_load_fw_keyblock(struct vb2_context *ctx); | 
 | int vb21_load_fw_keyblock(struct vb2_context *ctx); | 
 |  | 
 | /** | 
 |  * Verify the firmware preamble using the data subkey from the keyblock. | 
 |  * | 
 |  * After this call, the preamble is stored in the work buffer. | 
 |  * | 
 |  * @param ctx		Vboot context | 
 |  * @return VB2_SUCCESS, or error code on error. | 
 |  */ | 
 | int vb2_load_fw_preamble(struct vb2_context *ctx); | 
 | int vb21_load_fw_preamble(struct vb2_context *ctx); | 
 |  | 
 | /** | 
 |  * Verify the kernel keyblock using the previously-loaded kernel key. | 
 |  * | 
 |  * After this call, the data key is stored in the work buffer. | 
 |  * | 
 |  * @param ctx		Vboot context | 
 |  * @return VB2_SUCCESS, or error code on error. | 
 |  */ | 
 | int vb2_load_kernel_keyblock(struct vb2_context *ctx); | 
 |  | 
 | /** | 
 |  * Verify the kernel preamble using the data subkey from the keyblock. | 
 |  * | 
 |  * After this call, the preamble is stored in the work buffer. | 
 |  * | 
 |  * @param ctx		Vboot context | 
 |  * @return VB2_SUCCESS, or error code on error. | 
 |  */ | 
 | int vb2_load_kernel_preamble(struct vb2_context *ctx); | 
 |  |