bl_app_crc_check.h
/*
* Copyright (c) 2014 - 2015, Freescale Semiconductor, Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* o Redistributions of source code must retain the above copyright notice, this list
* of conditions and the following disclaimer.
*
* o Redistributions in binary form must reproduce the above copyright notice, this
* list of conditions and the following disclaimer in the documentation and/or
* other materials provided with the distribution.
*
* o Neither the name of Freescale Semiconductor, Inc. nor the names of its
* contributors may be used to endorse or promote products derived from this
* software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef __APP_CRC_CHECK_H__
#define __APP_CRC_CHECK_H__
#include <stdint.h>
#include "bootloader_common.h"
// Declarations
enum _crc_check_status
{
kStatus_AppCrcCheckPassed = MAKE_STATUS(kStatusGroup_AppCrcCheck, 0),
kStatus_AppCrcCheckFailed = MAKE_STATUS(kStatusGroup_AppCrcCheck, 1),
kStatus_AppCrcCheckInactive =
MAKE_STATUS(kStatusGroup_AppCrcCheck, 2),
kStatus_AppCrcCheckInvalid =
MAKE_STATUS(kStatusGroup_AppCrcCheck,
3),
kStatus_AppCrcCheckOutOfRange =
MAKE_STATUS(kStatusGroup_AppCrcCheck, 4)
};
typedef struct _crc_checksum_header
{
uint32_t tag;
uint32_t crcStartAddress;
uint32_t crcByteCount;
uint32_t crcExpectedValue;
} crc_checksum_header_t;
// Prototypes
#if __cplusplus
extern "C" {
#endif
#if BL_FEATURE_CRC_ASSERT
void restore_crc_check_failure_pin(void);
#endif
void init_crc_check_status(property_store_t *propertyStore);
bool is_application_crc_check_pass(void);
uint32_t calculate_application_crc32(crc_checksum_header_t *header, uint32_t crcHeaderStart);
#if __cplusplus
}
#endif
#endif // __APP_CRC_CHECK_H__
// EOF
_crc_check_status
_crc_check_status
Application crc check status codes.
Definition: bl_app_crc_check.h:45
crc_checksum_header_t::crcByteCount
uint32_t crcByteCount
[08:0b]
Definition: bl_app_crc_check.h:63
crc_checksum_header_t::crcStartAddress
uint32_t crcStartAddress
[04:07]
Definition: bl_app_crc_check.h:62
crc_checksum_header_t::tag
uint32_t tag
[00:03] Tag value used to validate the bootloader configuration data. Must be set to &#39;kcfg&#39;...
Definition: bl_app_crc_check.h:61
restore_crc_check_failure_pin
void restore_crc_check_failure_pin(void)
Restore crc check failure pin to default state.
Definition: bl_app_crc_check.c:62
kStatus_AppCrcCheckFailed
Crc check is valid but failed.
Definition: bl_app_crc_check.h:48
crc_checksum_header_t::crcExpectedValue
uint32_t crcExpectedValue
[0c:0f]
Definition: bl_app_crc_check.h:64
kStatus_AppCrcCheckInvalid
Crc check is invalid, As the BCA is invalid or crc parameters are unset (all 0xff bytes)...
Definition: bl_app_crc_check.h:51
kStatus_AppCrcCheckInactive
Crc check is inactive, Needs to be verified.
Definition: bl_app_crc_check.h:49
kStatusGroup_AppCrcCheck
Application crc check status group number (104).
Definition: bootloader_common.h:147
is_application_crc_check_pass
bool is_application_crc_check_pass(void)
Compare the CRC on a range of flash(specified in BCA) against a precomputed CRC value(stored in the B...
Definition: bl_app_crc_check.c:152
calculate_application_crc32
uint32_t calculate_application_crc32(crc_checksum_header_t *header, uint32_t crcHeaderStart)
Calculate CRC checksum according to specified checksum header.
Definition: bl_app_crc_check.c:91
kStatus_AppCrcCheckOutOfRange
Crc check is valid but addresses are out of range.
Definition: bl_app_crc_check.h:54
kStatus_AppCrcCheckPassed
Crc check is valid and passed.
Definition: bl_app_crc_check.h:47
crc_checksum_header_t
CRC Checksum Header.
Definition: bl_app_crc_check.h:59
init_crc_check_status
void init_crc_check_status(property_store_t *propertyStore)
Initialize crc check status property based on BCA related fields.
Definition: bl_app_crc_check.c:75
property_store_t
Structure of property store.
Definition: property.h:276