core/host_fw/host_fw_util.h (64 lines of code) (raw):

// Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. #ifndef HOST_FW_UTIL_H_ #define HOST_FW_UTIL_H_ #include <stdbool.h> #include <stdint.h> #include "crypto/hash.h" #include "crypto/rsa.h" #include "flash/flash.h" #include "manifest/pfm/pfm.h" #include "spi_filter/spi_filter_interface.h" #include "status/rot_status.h" int host_fw_determine_version (const struct flash *flash, const struct pfm_firmware_versions *allowed, const struct pfm_firmware_version **version); int host_fw_determine_offset_version (const struct flash *flash, uint32_t offset, const struct pfm_firmware_versions *allowed, const struct pfm_firmware_version **version); bool host_fw_are_images_different (const struct pfm_image_list *img_list1, const struct pfm_image_list *img_list2); int host_fw_verify_images (const struct flash *flash, const struct pfm_image_list *img_list, const struct hash_engine *hash, const struct rsa_engine *rsa); int host_fw_verify_offset_images (const struct flash *flash, const struct pfm_image_list *img_list, uint32_t offset, const struct hash_engine *hash, const struct rsa_engine *rsa); int host_fw_verify_images_multiple_fw (const struct flash *flash, const struct pfm_image_list *img_list, size_t fw_count, const struct hash_engine *hash, const struct rsa_engine *rsa); int host_fw_verify_offset_images_multiple_fw (const struct flash *flash, const struct pfm_image_list *img_list, size_t fw_count, uint32_t offset, const struct hash_engine *hash, const struct rsa_engine *rsa); int host_fw_full_flash_verification (const struct flash *flash, const struct pfm_image_list *img_list, const struct pfm_read_write_regions *writable, uint8_t unused_byte, const struct hash_engine *hash, const struct rsa_engine *rsa); int host_fw_full_flash_verification_multiple_fw (const struct flash *flash, const struct pfm_image_list *img_list, const struct pfm_read_write_regions *writable, size_t fw_count, uint8_t unused_byte, const struct hash_engine *hash, const struct rsa_engine *rsa); bool host_fw_are_read_write_regions_different (const struct pfm_read_write_regions *rw1, const struct pfm_read_write_regions *rw2); int host_fw_migrate_read_write_data (const struct flash *dest, const struct pfm_read_write_regions *dest_writable, const struct flash *src, const struct pfm_read_write_regions *src_writable); int host_fw_migrate_read_write_data_multiple_fw (const struct flash *dest, const struct pfm_read_write_regions *dest_writable, size_t dest_count, const struct flash *src, const struct pfm_read_write_regions *src_writable, size_t src_count); int host_fw_restore_flash_device (const struct flash *restore, const struct flash *from, const struct pfm_image_list *img_list, const struct pfm_read_write_regions *writable); int host_fw_restore_read_write_data (const struct flash *restore, const struct flash *from, const struct pfm_read_write_regions *writable); int host_fw_restore_read_write_data_multiple_fw (const struct flash *restore, const struct flash *from, const struct pfm_read_write_regions *writable, size_t fw_count); int host_fw_config_spi_filter_read_write_regions (const struct spi_filter_interface *filter, const struct pfm_read_write_regions *writable); int host_fw_config_spi_filter_read_write_regions_multiple_fw ( const struct spi_filter_interface *filter, const struct pfm_read_write_regions *writable, size_t fw_count); #define HOST_FW_UTIL_ERROR(code) ROT_ERROR (ROT_MODULE_HOST_FW_UTIL, code) /** * Error codes that can be generated by the host firmware utilities. */ enum { HOST_FW_UTIL_INVALID_ARGUMENT = HOST_FW_UTIL_ERROR (0x00), /**< Input parameter is null or not valid. */ HOST_FW_UTIL_NO_MEMORY = HOST_FW_UTIL_ERROR (0x01), /**< Memory allocation failed. */ HOST_FW_UTIL_UNSUPPORTED_VERSION = HOST_FW_UTIL_ERROR (0x02), /**< The host firmware does not match a supported version. */ HOST_FW_UTIL_DIFF_REGION_COUNT = HOST_FW_UTIL_ERROR (0x03), /**< Data migration with a different number of regions. */ HOST_FW_UTIL_DIFF_REGION_ADDR = HOST_FW_UTIL_ERROR (0x04), /**< Data migration with different region addresses. */ HOST_FW_UTIL_DIFF_REGION_SIZE = HOST_FW_UTIL_ERROR (0x05), /**< Data migration with different region sizes. */ HOST_FW_UTIL_BAD_IMAGE_HASH = HOST_FW_UTIL_ERROR (0x06), /**< A host firmware image on flash has an invalid hash. */ HOST_FW_UTIL_DIFF_FW_COUNT = HOST_FW_UTIL_ERROR (0x07), /**< Data migration with a different number of FW components. */ }; #endif /* HOST_FW_UTIL_H_ */