WS63 SDK 文档 7021f4f@fbb_ws63
ws63 和 ws63e 解决方案的 SDK 文档
载入中...
搜索中...
未找到
nv_update.h
浏览该文件的文档.
1/*
2 * Copyright (c) HiSilicon (Shanghai) Technologies Co., Ltd. 2019-2022. All rights reserved.
3 * Description: KV Storage Library flash updating module interface
4 */
5
6#ifndef NV_UPDATE_H_
7#define NV_UPDATE_H_
8
9#ifdef CONFIG_NV_SUPPORT_SINGLE_CORE_SYSTEM
10#include "nv_task_adapt.h"
11#else
12#include "flash_task_types.h"
13#endif
14#include "nv_store.h"
15#include "errcode.h"
16#include "nv_porting.h"
17
18#ifdef __cplusplus
19#if __cplusplus
20extern "C" {
21#endif /* __cplusplus */
22#endif /* __cplusplus */
23
24/* Unused states and events should be removed */
65
112
113/* State machine action function */
115
116/* Data to be written to flash can be scattered across a chain of one or more source buffers */
117typedef struct managed_source_buffer {
118 struct managed_source_buffer *next; /* Pointer to next source buffer in chain */
119 uint8_t *data; /* Pointer to data in RAM/Flash */
120 uint16_t data_length; /* Length of the data */
121 uint16_t data_consumed; /* How much of the data has been read so far */
122 bool release_data : 1; /* Data pointer is a temporary buffer that needs freeing */
123 bool receive_hash : 1; /* Data buffer should receive a hash/CRC calculation */
124 bool hash_data : 1; /* Indicates that the data needs hashing */
125 bool crc_data : 1; /* Indicates that the data needs CRC calculation */
126 bool encrypt_data : 1; /* Indicates that the data need encrypting */
127 bool gcm_tag_data : 1; /* Indicates that the data needs AES GCM tag */
129
130/* Write buffer, used to gather chunks of data from one or more source buffers */
131typedef struct {
132 uint8_t *data; /* RAM buffer used to hold chunks of data to be written to flash */
133 uint32_t write_location; /* Current location in flash to write to */
134 uint32_t resume_location; /* Write location reached when state machine was suspended */
135 uint32_t crypto_handle; /* AES crypo handle */
136 uint16_t size; /* Size of the RAM buffer */
137 uint16_t data_length; /* Length of data written to RAM buffer */
138 uint32_t crc_ret; /* crc_ret counter */
139 uint16_t data_consumed; /* How much of the data has been written to flash */
140 bool hash_claimed : 1; /* Hash function (SHA256) has been claimed */
141 bool encrypt_claimed : 1; /* Encryption function (AES) has been claimed */
142 bool crc_claimed : 1; /* CRC function has been claimed */
143 bool gcm_tag_claimed : 1; /* AES GCM tag has been claimed */
145
146/* State machine state transition table entry */
147typedef struct {
148 kv_update_state_t state : 5; /* Current state */
149 kv_update_state_t next_state : 5; /* State after the transition has occurred */
150 kv_update_event_t event : 5; /* Event required to cause the transition (raised by an action function) */
152
153/* State machine state action table entry */
154typedef struct {
155 kv_update_state_t state; /* Applicable state */
156 kv_state_action action; /* Action function to be called */
158
159/* Structure used to describe a state machine */
160typedef struct {
161 const kv_update_transition_t *transition_table; /* State Transition table for this state machine */
162 const kv_update_action_t *action_table; /* State Action table for this state machine */
163 uint16_t write_buffer_size; /* Size of the write buffer needed for this state machine */
164 kv_update_state_t initial_state; /* State to set on initial entry to this state machine */
165 kv_update_state_t resume_state; /* State to set on resuming this state machine */
166 kv_update_event_t exit_event; /* Event to send to previous state machine, if no exit action function defined */
168
169/* Used to hold run-time details of a state machine being processed */
170/* Individual state machines will often invoke a sub state machine.
171 * These data structures will be used to form a linked list of currently active state machines, although only one
172 * state machine is ever being processed at any one time.
173 * The tail of the list will be the initial state machine, started by one of the four kv_update_xxx() functions at the
174 * end of this file.
175 * The head of the list will be the current state machine being actively processed.
176 * The 'prev' field provides a path back to the initial state machine
177 */
179 struct kv_active_state_machine_t *prev; /* Previous state machine. Will be NULL if this is a root machine */
180 const kv_state_machine_t *machine; /* State machine being processed */
181 kv_managed_write_buffer_t *write_buffer; /* Holds chunk of data to be written to flash */
182 kv_managed_source_buffer_t *source_buffer; /* Linked list of source data buffers used to populate write buffer */
183 kv_managed_source_buffer_t *current_source; /* Current source buffer being used */
184 kv_update_state_t state; /* Current state machine state */
185 kv_update_event_t event; /* Last event raised (will have caused transition to current state) */
186 errcode_t error_code; /* Records the error code produced when raising an error event */
188
194
195#ifdef __cplusplus
196#if __cplusplus
197}
198#endif /* __cplusplus */
199#endif /* __cplusplus */
200
201#endif
cores_t
Generic enum to specify the required core. By using an enum, type safety can be enforced at compile t...
Definition platform_types.h:21
uint32_t errcode_t
Definition of error code.
Definition errcode.h:30
kv_store_t
Definition nv_store.h:25
errcode_t kv_update_modify_attribute(kv_store_t core, flash_task_node *sanitised_task)
Definition nv_update.c:1933
errcode_t kv_update_backup_init(void)
Definition nv_update.c:1821
struct managed_source_buffer kv_managed_source_buffer_t
errcode_t kv_update_write_key(kv_store_t core, flash_task_node *sanitised_task)
Definition nv_update.c:1899
errcode_t kv_update_init(cores_t core)
Definition nv_update.c:1718
kv_update_event_t
Definition nv_update.h:66
@ EVENT_KEY_UPDATE_NOT_NEEDED
Definition nv_update.h:86
@ EVENT_WRITE_BUFFER_STORED
Definition nv_update.h:72
@ EVENT_COPY_KEY_READY
Definition nv_update.h:79
@ EVENT_ALL_KEYS_COPIED
Definition nv_update.h:94
@ EVENT_STORE_READY
Definition nv_update.h:104
@ EVENT_DEFRAG_REQUIRED
Definition nv_update.h:99
@ EVENT_KEY_DATA_READY
Definition nv_update.h:105
@ EVENT_KEY_NOT_FOUND
Definition nv_update.h:78
@ EVENT_DEFRAG_COMPLETE
Definition nv_update.h:100
@ EVENT_KEYS_ERASED
Definition nv_update.h:82
@ EVENT_KEY_FOUND
Definition nv_update.h:77
@ EVENT_WRITE_BUFFER_PRIMED
Definition nv_update.h:71
@ EVENT_NONE
Definition nv_update.h:67
@ EVENT_PAGE_HEADER_READY
Definition nv_update.h:95
@ EVENT_WRITE_DATA_EXHAUSTED
Definition nv_update.h:70
@ EVENT_WRITE_COMPLETE
Definition nv_update.h:107
@ EVENT_KEY_UPDATE_REQUIRED
Definition nv_update.h:85
@ EVENT_DEFRAG_ERASED
Definition nv_update.h:90
@ EVENT_ERROR
Definition nv_update.h:110
@ EVENT_DEFRAG_FOUND
Definition nv_update.h:89
@ EVENT_CRYPTO_CLAIMED
Definition nv_update.h:106
@ EVENT_PAGE_SELECTED
Definition nv_update.h:75
@ EVENT_NVREGION_MAP_UPDATED
Definition nv_update.h:96
@ EVENT_PAGE_MAP_UPDATED
Definition nv_update.h:108
@ EVENT_DEFRAG_PREPARED
Definition nv_update.h:93
@ EVENT_SUSPEND
Definition nv_update.h:68
@ EVENT_PAGE_NOT_SELECTED
Definition nv_update.h:76
@ EVENT_WRITE_POS_FOUND
Definition nv_update.h:101
kv_update_state_t
Definition nv_update.h:25
@ STATE_PREP_STORE
Definition nv_update.h:53
@ STATE_COPY_ALL_KEYS
Definition nv_update.h:43
@ STATE_PRIME_WRITE
Definition nv_update.h:58
@ STATE_DEFRAG_PAGE
Definition nv_update.h:50
@ STATE_PREP_DELETE_KEY
Definition nv_update.h:35
@ STATE_INVALID
Definition nv_update.h:26
@ STATE_UPDATE_NVREGION_MAP
Definition nv_update.h:46
@ STATE_EXIT
Definition nv_update.h:63
@ STATE_PREP_MODIFY_KEY
Definition nv_update.h:36
@ STATE_WRITE_PAGE_HEADER
Definition nv_update.h:45
@ STATE_UPDATE_MAP_FOR_NEW
Definition nv_update.h:60
@ STATE_SELECT_NEXT_PAGE
Definition nv_update.h:30
@ STATE_PREP_KEY_DATA
Definition nv_update.h:54
@ STATE_ERASE_DEFRAG
Definition nv_update.h:41
@ STATE_PREP_PAGE_HEADER
Definition nv_update.h:44
@ STATE_FIND_WRITE_POS
Definition nv_update.h:49
@ STATE_FIND_NEXT_KEY
Definition nv_update.h:32
@ STATE_SUSPENDED
Definition nv_update.h:62
@ STATE_PREP_COPY_KEY
Definition nv_update.h:34
@ STATE_SELECT_FIRST_PAGE
Definition nv_update.h:29
@ STATE_CLAIM_CRYPTO
Definition nv_update.h:55
@ STATE_PERFORM_WRITE
Definition nv_update.h:59
@ STATE_FIND_FIRST_KEY
Definition nv_update.h:31
@ STATE_FIND_DEFRAG
Definition nv_update.h:40
@ STATE_UPDATE_MAP_FOR_OLD
Definition nv_update.h:37
@ STATE_FIND_EXISTING_KEY
Definition nv_update.h:33
@ STATE_PREP_DEFRAG
Definition nv_update.h:42
@ STATE_ERASE_OLD_KEYS
Definition nv_update.h:56
errcode_t kv_update_erase_key(kv_store_t core, flash_task_node *sanitised_tasks)
Definition nv_update.c:1867
kv_update_event_t(* kv_state_action)(void)
Definition nv_update.h:114
Definition nv_task_adapt.h:126
Definition nv_update.h:178
struct kv_active_state_machine_t * prev
Definition nv_update.h:179
kv_managed_source_buffer_t * source_buffer
Definition nv_update.h:182
kv_update_state_t state
Definition nv_update.h:184
kv_managed_source_buffer_t * current_source
Definition nv_update.h:183
kv_update_event_t event
Definition nv_update.h:185
kv_managed_write_buffer_t * write_buffer
Definition nv_update.h:181
const kv_state_machine_t * machine
Definition nv_update.h:180
errcode_t error_code
Definition nv_update.h:186
Definition nv_update.h:131
uint16_t size
Definition nv_update.h:136
bool gcm_tag_claimed
Definition nv_update.h:143
uint32_t write_location
Definition nv_update.h:133
uint16_t data_length
Definition nv_update.h:137
bool encrypt_claimed
Definition nv_update.h:141
bool hash_claimed
Definition nv_update.h:140
uint32_t crypto_handle
Definition nv_update.h:135
bool crc_claimed
Definition nv_update.h:142
uint8_t * data
Definition nv_update.h:132
uint32_t crc_ret
Definition nv_update.h:138
uint16_t data_consumed
Definition nv_update.h:139
uint32_t resume_location
Definition nv_update.h:134
Definition nv_update.h:160
uint16_t write_buffer_size
Definition nv_update.h:163
kv_update_state_t resume_state
Definition nv_update.h:165
kv_update_state_t initial_state
Definition nv_update.h:164
const kv_update_transition_t * transition_table
Definition nv_update.h:161
const kv_update_action_t * action_table
Definition nv_update.h:162
kv_update_event_t exit_event
Definition nv_update.h:166
Definition nv_update.h:154
kv_state_action action
Definition nv_update.h:156
kv_update_state_t state
Definition nv_update.h:155
Definition nv_update.h:147
kv_update_state_t next_state
Definition nv_update.h:149
kv_update_state_t state
Definition nv_update.h:148
kv_update_event_t event
Definition nv_update.h:150
Definition nv_update.h:117
uint16_t data_consumed
Definition nv_update.h:121
uint16_t data_length
Definition nv_update.h:120
bool release_data
Definition nv_update.h:122
struct managed_source_buffer * next
Definition nv_update.h:118
bool encrypt_data
Definition nv_update.h:126
uint8_t * data
Definition nv_update.h:119
bool gcm_tag_data
Definition nv_update.h:127
bool crc_data
Definition nv_update.h:125
bool hash_data
Definition nv_update.h:124
bool receive_hash
Definition nv_update.h:123