Example header file
Each implementation of the PSA Firmware Update API must provide a header file named psa/update.h
, in which the API elements in this specification are defined.
This appendix provides a example of the psa/update.h
header file with all of the API elements. This can be used as a starting point or reference for an implementation.
psa/update.h
typedef /*...*/ psa_fwu_iterator_t; typedef uint32_t psa_image_id_t; typedef int32_t psa_status_t; struct psa_hash_t { uint8_t value[PSA_FWU_MAX_DIGEST_SIZE]; }; typedef struct psa_image_info_t { struct psa_image_id_t image_id; psa_uuid_t vendor_id; psa_uuid_t class_id; struct psa_image_version_t version; uint8_t state; psa_staging_info_t staging; uint32_t error; uint8_t digest[PSA_FWU_MAX_DIGEST_SIZE]; } psa_image_info_t; typedef struct psa_image_version_t { uint16_t major; uint16_t minor; uint16_t patch; } psa_image_version_t; typedef struct psa_staging_info_t { uint8_t flags; uint8_t metadata_format; size_t max_size; psa_hash_t key_id; } psa_staging_info_t; typedef struct psa_uuid_t { uint32_t uuid[4]; } psa_uuid_t; #define PSA_ERROR_ALREADY_INSTALLED ((psa_status_t)-158) #define PSA_ERROR_COMMUNICATION_FAILURE ((psa_status_t)-145) #define PSA_ERROR_CORRUPTION_DETECTED ((psa_status_t)-151) #define PSA_ERROR_CURRENTLY_INSTALLING ((psa_status_t)-157) #define PSA_ERROR_DATA_CORRUPT ((psa_status_t)-152) #define PSA_ERROR_DATA_INVALID ((psa_status_t)-153) #define PSA_ERROR_DECRYPTION_FAILURE ((psa_status_t)-162) #define PSA_ERROR_DEPENDENCY_NEEDED ((psa_status_t)-156) #define PSA_ERROR_DOES_NOT_EXIST ((psa_status_t)-140) #define PSA_ERROR_FLASH_ABUSE ((psa_status_t)-160) #define PSA_ERROR_GENERIC_ERROR ((psa_status_t)-132) #define PSA_ERROR_HARDWARE_FAILURE ((psa_status_t)-147) #define PSA_ERROR_INSTALL_INTERRUPTED ((psa_status_t)-159) #define PSA_ERROR_INSUFFICIENT_DATA ((psa_status_t)-143) #define PSA_ERROR_INSUFFICIENT_MEMORY ((psa_status_t)-141) #define PSA_ERROR_INSUFFICIENT_POWER ((psa_status_t)-161) #define PSA_ERROR_INSUFFICIENT_STORAGE ((psa_status_t)-142) #define PSA_ERROR_INVALID_ARGUMENT ((psa_status_t)-135) #define PSA_ERROR_INVALID_SIGNATURE ((psa_status_t)-149) #define PSA_ERROR_MISSING_MANIFEST ((psa_status_t)-163) #define PSA_ERROR_NOT_PERMITTED ((psa_status_t)-133) #define PSA_ERROR_NOT_SUPPORTED ((psa_status_t)-134) #define PSA_ERROR_STORAGE_FAILURE ((psa_status_t)-146) #define PSA_ERROR_WRONG_DEVICE ((psa_status_t)-155) #define PSA_FWU_API_VERSION_MAJOR 0 #define PSA_FWU_API_VERSION_MINOR 7 #define PSA_FWU_MAX_BLOCK_SIZE IMPDEF #define PSA_FWU_MAX_DIGEST_SIZE IMPDEF #define PSA_IMAGE_CANDIDATE 1 #define PSA_IMAGE_FLAG_ENCRYPTION (0x00000002) #define PSA_IMAGE_FLAG_VOLATILE_STAGING (0x00000001) #define PSA_IMAGE_INSTALLED 2 #define PSA_IMAGE_PENDING_INSTALL 4 #define PSA_IMAGE_REBOOT_NEEDED 5 #define PSA_IMAGE_REJECTED 3 #define PSA_IMAGE_UNDEFINED 0 #define PSA_SUCCESS ((psa_status_t)0) #define PSA_SUCCESS_DEPENDENCY_NEEDED ((psa_status_t)+3) #define PSA_SUCCESS_REBOOT ((psa_status_t)+1) #define PSA_SUCCESS_RESTART ((psa_status_t)+2) psa_status_t psa_fwu_abort(psa_image_id_t image_id); psa_status_t psa_fwu_accept(void); psa_status_t psa_fwu_get_image_id(psa_fwu_iterator_t *iterator, psa_image_id_t *image_id); void psa_fwu_get_image_id_iterator(psa_fwu_iterator_t *iterator); bool psa_fwu_get_image_id_next(psa_fwu_iterator_t *iterator); bool psa_fwu_get_image_id_valid(psa_fwu_iterator_t *iterator); psa_status_t psa_fwu_install(psa_image_id_t image_id, psa_image_id_t *dependency_image_id, psa_image_version_t *dependency_version); psa_status_t psa_fwu_query(psa_image_id_t image_id, psa_image_info_t *info); psa_status_t psa_fwu_request_reboot(void); psa_status_t psa_fwu_request_rollback(uint32_t error); psa_status_t psa_fwu_set_manifest(psa_image_id_t image_id, const void *manifest, size_t manifest_size, psa_hash_t *manifest_dependency); psa_status_t psa_fwu_write(psa_image_id_t image_id, size_t image_offset, const void *block, size_t block_size);