/*
|
* Licensed to the Apache Software Foundation (ASF) under one
|
* or more contributor license agreements. See the NOTICE file
|
* distributed with this work for additional information
|
* regarding copyright ownership. The ASF licenses this file
|
* to you under the Apache License, Version 2.0 (the
|
* "License"); you may not use this file except in compliance
|
* with the License. You may obtain a copy of the License at
|
*
|
* http://www.apache.org/licenses/LICENSE-2.0
|
*
|
* Unless required by applicable law or agreed to in writing,
|
* software distributed under the License is distributed on an
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
* KIND, either express or implied. See the License for the
|
* specific language governing permissions and limitations
|
* under the License.
|
*/
|
|
#ifndef H_IMAGE_
|
#define H_IMAGE_
|
|
#include <inttypes.h>
|
|
#ifdef __cplusplus
|
extern "C" {
|
#endif
|
|
#define IMAGE_MAGIC 0x96f3b83d
|
#define IMAGE_TLV_INFO_MAGIC 0x6907
|
#define IMAGE_TLV_PROT_INFO_MAGIC 0x6908
|
|
#define IMAGE_HEADER_SIZE 32
|
|
/** Image header flags. */
|
#define IMAGE_F_NON_BOOTABLE 0x00000010 /* Split image app. */
|
#define IMAGE_F_ROM_FIXED_ADDR 0x00000100
|
|
/** Image trailer TLV types. */
|
#define IMAGE_TLV_SHA256 0x10 /* SHA256 of image hdr and body */
|
|
/** Image TLV-specific definitions. */
|
#define IMAGE_HASH_LEN 32
|
|
struct image_version {
|
uint8_t iv_major;
|
uint8_t iv_minor;
|
uint16_t iv_revision;
|
uint32_t iv_build_num;
|
};
|
|
/** Image header. All fields are in little endian byte order. */
|
struct image_header {
|
uint32_t ih_magic;
|
uint32_t ih_load_addr;
|
uint16_t ih_hdr_size; /* Size of image header (bytes). */
|
uint16_t _pad2;
|
uint32_t ih_img_size; /* Does not include header. */
|
uint32_t ih_flags; /* IMAGE_F_[...]. */
|
struct image_version ih_ver;
|
uint32_t _pad3;
|
};
|
|
/** Image TLV header. All fields in little endian. */
|
struct image_tlv_info {
|
uint16_t it_magic;
|
uint16_t it_tlv_tot; /* size of TLV area (including tlv_info header) */
|
};
|
|
/** Image trailer TLV format. All fields in little endian. */
|
struct image_tlv {
|
uint8_t it_type; /* IMAGE_TLV_[...]. */
|
uint8_t _pad;
|
uint16_t it_len; /* Data length (not including TLV header). */
|
};
|
|
//_Static_assert(sizeof(struct image_header) == IMAGE_HEADER_SIZE,
|
// "struct image_header not required size");
|
|
#ifdef __cplusplus
|
}
|
#endif
|
|
#endif
|