MCCI Trusted Bootloader
Simple trusted bootloader and tools for small embedded systems
mcci_bootloader.h
Go to the documentation of this file.
1/* mcci_bootloader.h Tue Jul 14 2020 11:31:05 tmm */
2
3/*
4
5Module: mcci_bootloader.h
6
7Function:
8 Main header file for MCCI bootloader for STM32L0
9
10Version:
11 V0.1.0 Tue Jul 14 2020 11:31:05 tmm Edit level 1
12
13Copyright notice:
14 This file copyright (C) 2020 by
15
16 MCCI Corporation
17 3520 Krums Corners Road
18 Ithaca, NY 14850
19
20 An unpublished work. All rights reserved.
21
22 This file is proprietary information, and may not be disclosed or
23 copied without the prior permission of MCCI Corporation.
24
25Author:
26 Terry Moore, MCCI Corporation July 2020
27
28Revision history:
29 0.1.0 Tue Jul 14 2020 11:31:05 tmm
30 Module created.
31
32*/
33
34#ifndef _MCCI_BOOTLOADER_H_ /* prevent multiple includes */
35#define _MCCI_BOOTLOADER_H_
36
37#ifndef _MCCI_BOOTLOADER_TYPES_H_
39#endif
40
41#ifndef _mcci_tweetnacl_sign_h_
42# include "mcci_tweetnacl_sign.h"
43#endif
44
46
47/****************************************************************************\
48|
49| Boot error codes
50|
51\****************************************************************************/
52
54 {
55 McciBootloaderError_OK = 0, ///< successful
56 McciBootloaderError_BootloaderNotValid, ///< bootloader image isn't valid
57 McciBootloaderError_ResetClockNotValid, ///< post-reset clock not valid
58 McciBootloaderError_NoAppImage, ///< app image not valid, no fallback available.
60 McciBootloaderError_ReadFailed, ///< storage read failed during program
61 McciBootloaderError_FlashWriteFailed, ///< flash write failed during programming
62 McciBootloaderError_FlashVerifyFailed, ///< flash verify failed after programming
63 McciBootloaderError_FlashNotFound, ///< flash didn't reply properly to SFDP
64 McciBootloaderError_FlashNotSupported, ///< flash SFDP contents are prior to JESD216B, or otherwise not suitable.
65 };
66// typedef uint32_t McciBootloaderError_t; -- in mcci_bootloader_types.h.
67
79
80/****************************************************************************\
81|
82| Parameters from link script
83|
84\****************************************************************************/
85
86extern const void *gk_McciBootloader_BootBase;
87extern const void *gk_McciBootloader_BootTop;
88extern const void *gk_McciBootloader_ImageSize;
89
90extern const void *gk_McciBootloader_AppBase;
91extern const void *gk_McciBootloader_AppTop;
92extern const void *gk_McciBootloader_MfgBase;
93extern const void *gk_McciBootloader_MfgTop;
94
97
98extern const void *gk_McciBootloader_DataImageBase;
99extern void *g_McciBootloader_DataBase;
100extern void *g_McciBootloader_DataTop;
101extern void *g_McciBootloader_BssBase;
102extern void *g_McciBootloader_BssTop;
103extern void *g_McciBootloader_StackTop;
104
105/****************************************************************************\
106|
107| Various utilities
108|
109\****************************************************************************/
110
111/*
112
113Name: McciBootloader_codeSize()
114
115Function:
116 Return size of code region given pointers
117
118Definition:
119 size_t McciBootloader_codeSize(
120 const void *base,
121 const void *top
122 );
123
124Description:
125 `base` points to the first byte in the region; `top`
126 points one byte past the last byte in the region. The result is the number
127 of bytes in the region. Note that a zero-size region
128 is indicated by top being equal to base (as a uint8_t),
129 and it's not possible to represent a region that's larger
130 than SIZE_MAX.
131
132Returns:
133 Number of bytes in region.
134
135Notes:
136 The result can't represent the entire address space.
137
138*/
139
140static inline
141size_t McciBootloader_codeSize(const void *base, const void *top)
142 {
143 return (const uint8_t *)top - (const uint8_t *)base;
144 }
145
146/****************************************************************************\
147|
148| APIs
149|
150\****************************************************************************/
151
152void
154
155bool
157 const void *pBase,
158 size_t numBytes
159 );
160
161bool
164 McciBootloader_AppInfo_t *pAppInfo,
165 const mcci_tweetnacl_sign_publickey_t *pPublicKey
166 );
167
171 const McciBootloader_AppInfo_t *pAppInfo
172 );
173
174extern uint8_t g_McciBootloader_imageBlock[4096];
175
177#endif /* _MCCI_BOOTLOADER_H_ */
void * g_McciBootloader_DataTop
const void * gk_McciBootloader_DataImageBase
bool McciBootloader_checkStorageImage(McciBootloaderStorageAddress_t address, McciBootloader_AppInfo_t *pAppInfo, const mcci_tweetnacl_sign_publickey_t *pPublicKey)
const void * gk_McciBootloader_ImageSize
uint8_t g_McciBootloader_imageBlock[4096]
const void * gk_McciBootloader_BootBase
bool McciBootloader_checkCodeValid(const void *pBase, size_t numBytes)
void * g_McciBootloader_BssBase
const void * gk_McciBootloader_BootTop
void * g_McciBootloader_BssTop
McciBootloaderState_e
@ McciBootloaderState_CheckingFallbackStorageHash
@ McciBootloaderState_WritingApp
@ McciBootloaderState_ErasingApp
@ McciBootloaderState_CheckingPrimaryStorageSignature
@ McciBootloaderState_CheckingFallbackStorageSignature
@ McciBootloaderState_CheckingPrimaryStorageHash
@ McciBootloaderState_Initial
initial state when annunciator launched
@ McciBootloaderState_CheckingApp
McciBootloaderError_t McciBootloader_programAndCheckFlash(McciBootloaderStorageAddress_t address, const McciBootloader_AppInfo_t *pAppInfo)
const void * gk_McciBootloader_MfgBase
void * g_McciBootloader_DataBase
static size_t McciBootloader_codeSize(const void *base, const void *top)
const void * gk_McciBootloader_AppTop
const void * gk_McciBootloader_MfgTop
void * g_McciBootloader_StackTop
void McciBootloader_main(void)
void * g_McciBootloader_SocRamTop
const void * gk_McciBootloader_AppBase
McciBootloaderError_e
@ McciBootloaderError_FlashNotFound
flash didn't reply properly to SFDP
@ McciBootloaderError_FlashWriteFailed
flash write failed during programming
@ McciBootloaderError_NoAppImage
app image not valid, no fallback available.
@ McciBootloaderError_ReadFailed
storage read failed during program
@ McciBootloaderError_OK
successful
@ McciBootloaderError_FlashVerifyFailed
flash verify failed after programming
@ McciBootloaderError_EraseFailed
erase failed
@ McciBootloaderError_FlashNotSupported
flash SFDP contents are prior to JESD216B, or otherwise not suitable.
@ McciBootloaderError_ResetClockNotValid
post-reset clock not valid
@ McciBootloaderError_BootloaderNotValid
bootloader image isn't valid
void * g_McciBootloader_SocRamBase
#define MCCI_BOOTLOADER_BEGIN_DECLS
#define MCCI_BOOTLOADER_END_DECLS
uint32_t McciBootloaderError_t
error codes for the bootloader
uint32_t McciBootloaderStorageAddress_t
Abstract type for storage byte addresses.