1 /*
2  * Copyright 2021 NXP
3  * All rights reserved.
4  *
5  * SPDX-License-Identifier: BSD-3-Clause
6  */
7 
8 #ifndef _API_KB_API_H_
9 #define _API_KB_API_H_
10 
11 #include "fsl_common.h"
12 
13 /*******************************************************************************
14  * Definitions
15  ******************************************************************************/
16 
17 #define kStatusGroup_SBLoader (102U) /*!< SB loader status group number */
18 
19 typedef struct _kb_interface
20 {
21     /*!< Initialize the API. */
22     status_t (*kb_init)(void);
23     status_t (*kb_deinit)(void);
24     status_t (*kb_execute)(const uint8_t *data, uint32_t dataLength, uint32_t isUpdateExt);
25 } kb_interface_t;
26 
27 /*! @brief SB loader status codes.*/
28 enum
29 {
30     kStatus_RomLdr_SectionOverrun  = MAKE_STATUS(kStatusGroup_SBLoader, 0),
31     kStatus_RomLdr_Signature       = MAKE_STATUS(kStatusGroup_SBLoader, 1),
32     kStatus_RomLdr_SectionLength   = MAKE_STATUS(kStatusGroup_SBLoader, 2),
33     kStatus_RomLdr_UnencryptedOnly = MAKE_STATUS(kStatusGroup_SBLoader, 3),
34     kStatus_RomLdr_EOFReached      = MAKE_STATUS(kStatusGroup_SBLoader, 4),
35     kStatus_RomLdr_Checksum        = MAKE_STATUS(kStatusGroup_SBLoader, 5),
36     kStatus_RomLdr_Crc32Error      = MAKE_STATUS(kStatusGroup_SBLoader, 6),
37     kStatus_RomLdr_UnknownCommand  = MAKE_STATUS(kStatusGroup_SBLoader, 7),
38     kStatus_RomLdr_IdNotFound      = MAKE_STATUS(kStatusGroup_SBLoader, 8),
39     kStatus_RomLdr_DataUnderrun    = MAKE_STATUS(kStatusGroup_SBLoader, 9),
40     kStatus_RomLdr_JumpReturned    = MAKE_STATUS(kStatusGroup_SBLoader, 10),
41     kStatus_RomLdr_CallFailed      = MAKE_STATUS(kStatusGroup_SBLoader, 11),
42     kStatus_RomLdr_KeyNotFound     = MAKE_STATUS(kStatusGroup_SBLoader, 12),
43     kStatus_RomLdr_SecureOnly      = MAKE_STATUS(kStatusGroup_SBLoader, 13),
44     kStatus_RomLdr_ResetReturned   = MAKE_STATUS(kStatusGroup_SBLoader, 14),
45 
46     kStatus_RomLdr_RollbackBlocked        = MAKE_STATUS(kStatusGroup_SBLoader, 15),
47     kStatus_RomLdr_InvalidSectionMacCount = MAKE_STATUS(kStatusGroup_SBLoader, 16),
48     kStatus_RomLdr_UnexpectedCommand      = MAKE_STATUS(kStatusGroup_SBLoader, 17),
49     kStatus_RomLdr_BadSBKEK               = MAKE_STATUS(kStatusGroup_SBLoader, 18),
50     kStatus_RomLdr_PendingJumpCommand     = MAKE_STATUS(kStatusGroup_SBLoader, 19),
51 };
52 
53 /*******************************************************************************
54  * API
55  ******************************************************************************/
56 #if defined(__cplusplus)
57 extern "C" {
58 #endif
59 
60 /*!
61  * @brief This API is used to initialize bootloader and nboot context necessary to process sb3 file format.
62  *
63  * @retval #kStatus_Success API was executed successfully.
64  * @retval #kStatus_Fail API execution failed.
65  */
66 status_t KB_Init(void);
67 
68 /*!
69  * @brief This API is used to decrypt sb3 file and store signed image contents specified by loader command supported
70  * while generating sb3 image through Json configuration. If sb3 file to be processed includes sblaoder command
71  * "programFuses" then voltage must be regulated for over-drive and normalize voltage once operation is completed.
72  *
73  * @param data A Pointer to start of sb file data in memory.
74  * @param dataLength sb file data length in bytes.
75  * @param isUpdateExt Indicator for update(sb) file start address is in internal or external flash.
76  *
77  * @retval #kStatus_Success API was executed successfully.
78  * @retval #kStatus_Fail API execution failed.
79  * @retval #kStatus_InvalidArgument An invalid argument is provided.
80  * @retval #kStatus_ROM_LPSPI_Busy LPSPI transfer is busy.
81  * @retval #kStatus_RomLdr_DataUnderrun
82  */
83 status_t KB_Execute(const uint8_t *data, uint32_t dataLength, uint32_t isUpdateExt);
84 
85 /*!
86  * @brief This API is used to release nboot context and finalize sb3 file processing.
87  *
88  * @retval #kStatus_Success API was executed successfully.
89  * @retval #kStatus_Fail API execution failed.
90  */
91 status_t KB_Deinit(void);
92 
93 #if defined(__cplusplus)
94 }
95 #endif
96 
97 /*!
98  *@}
99  */
100 
101 #endif /* _API_KB_API_H_ */
102