You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

445 lines
17 KiB

  1. /**
  2. ******************************************************************************
  3. * @file stm32h7xx_hal_otfdec.h
  4. * @author MCD Application Team
  5. * @brief Header file of OTFDEC HAL module.
  6. ******************************************************************************
  7. * @attention
  8. *
  9. * <h2><center>&copy; Copyright (c) 2018 STMicroelectronics.
  10. * All rights reserved.</center></h2>
  11. *
  12. * This software component is licensed by ST under BSD 3-Clause license,
  13. * the "License"; You may not use this file except in compliance with the
  14. * License. You may obtain a copy of the License at:
  15. * opensource.org/licenses/BSD-3-Clause
  16. *
  17. ******************************************************************************
  18. */
  19. /* Define to prevent recursive inclusion -------------------------------------*/
  20. #ifndef __STM32H7xx_HAL_OTFDEC_H
  21. #define __STM32H7xx_HAL_OTFDEC_H
  22. #ifdef __cplusplus
  23. extern "C" {
  24. #endif
  25. #if defined(OTFDEC1)
  26. /* Includes ------------------------------------------------------------------*/
  27. #include "stm32h7xx_hal_def.h"
  28. /** @addtogroup STM32H7xx_HAL_Driver
  29. * @{
  30. */
  31. /** @addtogroup OTFDEC
  32. * @{
  33. */
  34. /* Exported types ------------------------------------------------------------*/
  35. /** @defgroup OTFDEC_Exported_Types OTFDEC Exported Types
  36. * @{
  37. */
  38. /** @defgroup OTFDEC_Exported_Types_Group1 OTFDEC region configuration definitions
  39. * @{
  40. */
  41. /**
  42. * @brief OTFDEC region configuration structure definition
  43. */
  44. typedef struct
  45. {
  46. uint32_t Nonce[2]; /*!< OTFDEC region nonce */
  47. uint32_t StartAddress; /*!< OTFDEC region start address */
  48. uint32_t EndAddress; /*!< OTFDEC region end address */
  49. uint16_t Version; /*!< OTFDEC region firmware version */
  50. }OTFDEC_RegionConfigTypeDef;
  51. /**
  52. * @}
  53. */
  54. /** @defgroup OTFDEC_Exported_Types_Group2 OTFDEC Peripheral handle definitions
  55. * @{
  56. */
  57. /**
  58. * @brief OTFDEC states structure definition
  59. */
  60. typedef enum
  61. {
  62. HAL_OTFDEC_STATE_RESET = 0x00U, /*!< OTFDEC not yet initialized or disabled */
  63. HAL_OTFDEC_STATE_READY = 0x01U, /*!< OTFDEC initialized and ready for use */
  64. HAL_OTFDEC_STATE_BUSY = 0x02U, /*!< OTFDEC internal processing is ongoing */
  65. }HAL_OTFDEC_StateTypeDef;
  66. /**
  67. * @brief OTFDEC handle structure definition
  68. */
  69. #if (USE_HAL_OTFDEC_REGISTER_CALLBACKS == 1)
  70. typedef struct __OTFDEC_HandleTypeDef
  71. #else
  72. typedef struct
  73. #endif /* USE_HAL_OTFDEC_REGISTER_CALLBACKS */
  74. {
  75. OTFDEC_TypeDef *Instance; /*!< OTFDEC registers base address */
  76. HAL_OTFDEC_StateTypeDef State; /*!< OTFDEC state */
  77. HAL_LockTypeDef Lock; /*!< OTFDEC locking object */
  78. __IO uint32_t ErrorCode; /*!< OTFDEC error code */
  79. #if (USE_HAL_OTFDEC_REGISTER_CALLBACKS == 1)
  80. void (* ErrorCallback)(struct __OTFDEC_HandleTypeDef *hotfdec); /*!< OTFDEC error callback */
  81. void (* MspInitCallback)(struct __OTFDEC_HandleTypeDef *hotfdec); /*!< OTFDEC Msp Init callback */
  82. void (* MspDeInitCallback)(struct __OTFDEC_HandleTypeDef *hotfdec); /*!< OTFDEC Msp DeInit callback */
  83. #endif /* USE_HAL_OTFDEC_REGISTER_CALLBACKS */
  84. }OTFDEC_HandleTypeDef;
  85. #if (USE_HAL_OTFDEC_REGISTER_CALLBACKS == 1)
  86. /**
  87. * @brief HAL OTFDEC Callback ID enumeration definition
  88. */
  89. typedef enum
  90. {
  91. HAL_OTFDEC_ERROR_CB_ID = 0x00U, /*!< OTFDEC error callback ID */
  92. HAL_OTFDEC_MSPINIT_CB_ID = 0x01U, /*!< OTFDEC Msp DeInit callback ID */
  93. HAL_OTFDEC_MSPDEINIT_CB_ID = 0x02U /*!< OTFDEC Msp DeInit callback ID */
  94. } HAL_OTFDEC_CallbackIDTypeDef;
  95. /**
  96. * @brief HAL OTFDEC Callback pointer definition
  97. */
  98. typedef void (*pOTFDEC_CallbackTypeDef)(OTFDEC_HandleTypeDef *hotfdec); /*!< pointer to a OTFDEC callback function */
  99. #endif /* USE_HAL_OTFDEC_REGISTER_CALLBACKS */
  100. /**
  101. * @}
  102. */
  103. /**
  104. * @}
  105. */
  106. /* Exported constants --------------------------------------------------------*/
  107. /** @defgroup OTFDEC_Exported_Constants OTFDEC Exported Constants
  108. * @{
  109. */
  110. /** @defgroup OTFDEC_Interrupts OTFDEC Interrupts
  111. * @{
  112. */
  113. #define OTFDEC_SEC_ERROR_INT (OTFDEC_IER_SEIE ) /*!< OTFDEC security error interrupt */
  114. #define OTFDEC_EXE_ERROR_INT ( OTFDEC_IER_XONEIE ) /*!< OTFDEC execution error interrupt */
  115. #define OTFDEC_KEY_ERROR_INT ( OTFDEC_IER_KEIE) /*!< OTFDEC key error interrupt */
  116. #define OTFDEC_SEC_EXE_ERROR_INT (OTFDEC_IER_SEIE|OTFDEC_IER_XONEIE ) /*!< OTFDEC security and execution errors interrupts */
  117. #define OTFDEC_SEC_KEY_ERROR_INT (OTFDEC_IER_SEIE| OTFDEC_IER_KEIE) /*!< OTFDEC security and key errors interrupts */
  118. #define OTFDEC_EXE_KEY_ERROR_INT ( OTFDEC_IER_XONEIE|OTFDEC_IER_KEIE) /*!< OTFDEC execution and key errors interrupts */
  119. #define OTFDEC_ALL_INT (OTFDEC_IER_SEIE|OTFDEC_IER_XONEIE|OTFDEC_IER_KEIE) /*!< OTFDEC all interrupts */
  120. /**
  121. * @}
  122. */
  123. /** @defgroup OTFDEC_Region_Enable OTFDEC Region Enable
  124. * @{
  125. */
  126. #define OTFDEC_REG_CONFIGR_REG_DISABLE 0x00000000U /*!< OTFDEC region encryption or on-the-fly decryption disable */
  127. #define OTFDEC_REG_CONFIGR_REG_ENABLE OTFDEC_REG_CONFIGR_REG_EN /*!< OTFDEC region encryption or on-the-fly decryption enable */
  128. /**
  129. * @}
  130. */
  131. /** @defgroup OTFDEC_Region_Configuration_Lock OTFDEC Region Configuration Lock
  132. * @{
  133. */
  134. #define OTFDEC_REG_CONFIGR_LOCK_DISABLE 0x00000000U /*!< OTFDEC region configuration lock disable */
  135. #define OTFDEC_REG_CONFIGR_LOCK_ENABLE OTFDEC_REG_CONFIGR_CONFIGLOCK /*!< OTFDEC region configuration lock enable */
  136. /**
  137. * @}
  138. */
  139. /** @defgroup OTFDEC_Region_Operating_Mode OTFDEC Region Operating Mode
  140. * @{
  141. */
  142. #define OTFDEC_REG_MODE_INSTRUCTION_ACCESSES_ONLY 0x00000000U /*!< Only instruction accesses are decrypted */
  143. #define OTFDEC_REG_MODE_DATA_ACCESSES_ONLY OTFDEC_REG_CONFIGR_MODE_0 /*!< Only data accesses are decrypted */
  144. #define OTFDEC_REG_MODE_INSTRUCTION_OR_DATA_ACCESSES OTFDEC_REG_CONFIGR_MODE_1 /*!< All read accesses are decrypted */
  145. #define OTFDEC_REG_MODE_INSTRUCTION_ACCESSES_ONLY_WITH_CIPHER OTFDEC_REG_CONFIGR_MODE /*!< Only instruction accesses are decrypted with proprietary cipher activated */
  146. /**
  147. * @}
  148. */
  149. /** @defgroup OTFDEC_Error_Definition OTFDEC Error Definition
  150. * @{
  151. */
  152. #define HAL_OTFDEC_ERROR_NONE ((uint32_t)0x00000000U) /*!< No error */
  153. #define HAL_OTFDEC_SECURITY_ERROR ((uint32_t)0x00000001U) /*!< Security error */
  154. #define HAL_OTFDEC_EXECUTE_ERROR ((uint32_t)0x00000002U) /*!< Execute-only Execute-Never error */
  155. #define HAL_OTFDEC_KEY_ERROR ((uint32_t)0x00000004U) /*!< Key error */
  156. #if (USE_HAL_OTFDEC_REGISTER_CALLBACKS == 1)
  157. #define HAL_OTFDEC_ERROR_INVALID_CALLBACK ((uint32_t)0x00000008U) /*!< Invalid Callback error */
  158. #endif /* USE_HAL_OTFDEC_REGISTER_CALLBACKS */
  159. /**
  160. * @}
  161. */
  162. /** @defgroup OTFDEC_Regions_Index OTFDEC Regions Index
  163. * @{
  164. */
  165. #define OTFDEC_REGION1 ((uint32_t)0x00000000U) /*!< OTFDEC region 1 */
  166. #define OTFDEC_REGION2 ((uint32_t)0x00000001U) /*!< OTFDEC region 2 */
  167. #define OTFDEC_REGION3 ((uint32_t)0x00000002U) /*!< OTFDEC region 3 */
  168. #define OTFDEC_REGION4 ((uint32_t)0x00000003U) /*!< OTFDEC region 4 */
  169. /**
  170. * @}
  171. */
  172. /**
  173. * @}
  174. */
  175. /* Exported macro ------------------------------------------------------------*/
  176. /** @defgroup OTFDEC_Exported_Macros OTFDEC Exported Macros
  177. * @{
  178. */
  179. /** @brief Reset OTFDEC handle state.
  180. * @param __HANDLE__ pointer to an OTFDEC_HandleTypeDef structure that contains
  181. * the configuration information for OTFDEC module
  182. * @retval None
  183. */
  184. #if (USE_HAL_OTFDEC_REGISTER_CALLBACKS == 1)
  185. #define __HAL_OTFDEC_RESET_HANDLE_STATE(__HANDLE__) \
  186. do{ \
  187. (__HANDLE__)->State = HAL_OTFDEC_STATE_RESET; \
  188. (__HANDLE__)->MspInitCallback = NULL; \
  189. (__HANDLE__)->MspDeInitCallback = NULL; \
  190. } while(0)
  191. #else
  192. #define __HAL_OTFDEC_RESET_HANDLE_STATE(__HANDLE__) \
  193. ((__HANDLE__)->State = HAL_OTFDEC_STATE_RESET)
  194. #endif /* USE_HAL_OTFDEC_REGISTER_CALLBACKS */
  195. /**
  196. * @brief Enable OTFDEC peripheral interrupts combination
  197. * @param __HANDLE__ pointer to an OTFDEC_HandleTypeDef structure that contains
  198. * the configuration information for OTFDEC module
  199. * @param __INTERRUPT__ mask on enabled interrupts
  200. * This parameter can be one of the following values:
  201. * @arg @ref OTFDEC_SEC_ERROR_INT OTFDEC security error interrupt
  202. * @arg @ref OTFDEC_EXE_ERROR_INT OTFDEC execution error interrupt
  203. * @arg @ref OTFDEC_KEY_ERROR_INT OTFDEC key error interrupt
  204. * @arg @ref OTFDEC_SEC_EXE_ERROR_INT OTFDEC security and execution errors interrupts
  205. * @arg @ref OTFDEC_SEC_KEY_ERROR_INT OTFDEC security and key errors interrupts
  206. * @arg @ref OTFDEC_EXE_KEY_ERROR_INT OTFDEC execution and key errors interrupts
  207. * @arg @ref OTFDEC_ALL_INT OTFDEC all interrupts
  208. * @retval None
  209. */
  210. #define __HAL_OTFDEC_ENABLE_IT(__HANDLE__, __INTERRUPT__) SET_BIT(((__HANDLE__)->Instance->IER), (__INTERRUPT__))
  211. /**
  212. * @brief Disable OTFDEC peripheral interrupts combination
  213. * @param __HANDLE__ pointer to an OTFDEC_HandleTypeDef structure that contains
  214. * the configuration information for OTFDEC module
  215. * @param __INTERRUPT__ mask on disabled interrupts
  216. * This parameter can be one of the following values:
  217. * @arg @ref OTFDEC_SEC_ERROR_INT OTFDEC security error interrupt
  218. * @arg @ref OTFDEC_EXE_ERROR_INT OTFDEC execution error interrupt
  219. * @arg @ref OTFDEC_KEY_ERROR_INT OTFDEC key error interrupt
  220. * @arg @ref OTFDEC_SEC_EXE_ERROR_INT OTFDEC security and execution errors interrupts
  221. * @arg @ref OTFDEC_SEC_KEY_ERROR_INT OTFDEC security and key errors interrupts
  222. * @arg @ref OTFDEC_EXE_KEY_ERROR_INT OTFDEC execution and key errors interrupts
  223. * @arg @ref OTFDEC_ALL_INT OTFDEC all interrupts
  224. * @retval None
  225. */
  226. #define __HAL_OTFDEC_DISABLE_IT(__HANDLE__, __INTERRUPT__) CLEAR_BIT(((__HANDLE__)->Instance->IER), (__INTERRUPT__))
  227. /**
  228. * @}
  229. */
  230. /* Exported functions --------------------------------------------------------*/
  231. /** @defgroup OTFDEC_Exported_Functions OTFDEC Exported Functions
  232. * @{
  233. */
  234. /** @addtogroup OTFDEC_Exported_Functions_Group1 Initialization and de-initialization functions
  235. * @{
  236. */
  237. HAL_StatusTypeDef HAL_OTFDEC_Init(OTFDEC_HandleTypeDef *hotfdec);
  238. HAL_StatusTypeDef HAL_OTFDEC_DeInit(OTFDEC_HandleTypeDef *hotfdec);
  239. void HAL_OTFDEC_MspInit(OTFDEC_HandleTypeDef *hotfdec);
  240. void HAL_OTFDEC_MspDeInit(OTFDEC_HandleTypeDef *hotfdec);
  241. #if (USE_HAL_OTFDEC_REGISTER_CALLBACKS == 1)
  242. /* Callbacks Register/UnRegister functions ***********************************/
  243. HAL_StatusTypeDef HAL_OTFDEC_RegisterCallback(OTFDEC_HandleTypeDef *hotfdec, HAL_OTFDEC_CallbackIDTypeDef CallbackID,
  244. pOTFDEC_CallbackTypeDef pCallback);
  245. HAL_StatusTypeDef HAL_OTFDEC_UnRegisterCallback(OTFDEC_HandleTypeDef *hotfdec, HAL_OTFDEC_CallbackIDTypeDef CallbackID);
  246. #endif /* USE_HAL_OTFDEC_REGISTER_CALLBACKS */
  247. /**
  248. * @}
  249. */
  250. /** @addtogroup OTFDEC_Exported_Functions_Group2 OTFDEC IRQ handler management
  251. * @{
  252. */
  253. void HAL_OTFDEC_IRQHandler(OTFDEC_HandleTypeDef *hotfdec);
  254. void HAL_OTFDEC_ErrorCallback(OTFDEC_HandleTypeDef *hotfdec);
  255. /**
  256. * @}
  257. */
  258. /** @addtogroup OTFDEC_Exported_Functions_Group3 Peripheral Control functions
  259. * @{
  260. */
  261. HAL_StatusTypeDef HAL_OTFDEC_RegionKeyLock(OTFDEC_HandleTypeDef *hotfdec, uint32_t RegionIndex);
  262. HAL_StatusTypeDef HAL_OTFDEC_RegionSetKey(OTFDEC_HandleTypeDef *hotfdec, uint32_t RegionIndex, uint32_t *pKey);
  263. HAL_StatusTypeDef HAL_OTFDEC_RegionSetMode(OTFDEC_HandleTypeDef *hotfdec, uint32_t RegionIndex, uint32_t mode);
  264. HAL_StatusTypeDef HAL_OTFDEC_RegionConfig(OTFDEC_HandleTypeDef *hotfdec, uint32_t RegionIndex, OTFDEC_RegionConfigTypeDef *Config, uint32_t lock);
  265. uint32_t HAL_OTFDEC_KeyCRCComputation(uint32_t *pKey);
  266. HAL_StatusTypeDef HAL_OTFDEC_RegionEnable(OTFDEC_HandleTypeDef *hotfdec, uint32_t RegionIndex);
  267. HAL_StatusTypeDef HAL_OTFDEC_RegionDisable(OTFDEC_HandleTypeDef *hotfdec, uint32_t RegionIndex);
  268. /**
  269. * @}
  270. */
  271. /** @addtogroup @addtogroup OTFDEC_Exported_Functions_Group4 Peripheral State and Status functions
  272. * @{
  273. */
  274. HAL_OTFDEC_StateTypeDef HAL_OTFDEC_GetState(OTFDEC_HandleTypeDef *hotfdec);
  275. uint32_t HAL_OTFDEC_RegionGetKeyCRC(OTFDEC_HandleTypeDef *hotfdec, uint32_t RegionIndex);
  276. HAL_StatusTypeDef HAL_OTFDEC_RegionGetConfig(OTFDEC_HandleTypeDef *hotfdec, uint32_t RegionIndex, OTFDEC_RegionConfigTypeDef *Config);
  277. /**
  278. * @}
  279. */
  280. /**
  281. * @}
  282. */
  283. /* Private types -------------------------------------------------------------*/
  284. /** @defgroup OTFDEC_Private_Types OTFDEC Private Types
  285. * @{
  286. */
  287. /**
  288. * @}
  289. */
  290. /* Private variables ---------------------------------------------------------*/
  291. /** @defgroup OTFDEC_Private_Variables OTFDEC Private Variables
  292. * @{
  293. */
  294. /**
  295. * @}
  296. */
  297. /* Private constants ---------------------------------------------------------*/
  298. /** @defgroup OTFDEC_Private_Constants OTFDEC Private Constants
  299. * @{
  300. */
  301. /**
  302. * @}
  303. */
  304. /* Private macros ------------------------------------------------------------*/
  305. /** @defgroup OTFDEC_Private_Macros OTFDEC Private Macros
  306. * @{
  307. */
  308. /**
  309. * @brief Verify the OTFDEC peripheral interrupts parameter.
  310. * @param __INT__ OTFDEC peripheral set of interrupts parameter
  311. * @retval SET (__INT__ is valid) or RESET (__INT__ is invalid)
  312. */
  313. #define IS_OTFDEC_INTERRUPTS(__INT__) (((__INT__) == OTFDEC_SEC_ERROR_INT) || \
  314. ((__INT__) == OTFDEC_EXE_ERROR_INT) || \
  315. ((__INT__) == OTFDEC_KEY_ERROR_INT) || \
  316. ((__INT__) == OTFDEC_SEC_EXE_ERROR_INT) || \
  317. ((__INT__) == OTFDEC_SEC_KEY_ERROR_INT) || \
  318. ((__INT__) == OTFDEC_EXE_KEY_ERROR_INT) || \
  319. ((__INT__) == OTFDEC_ALL_INT) )
  320. /**
  321. * @brief Verify the OTFDEC region configuration lock parameter.
  322. * @param __LOCK__ OTFDEC region lock parameter.
  323. * @retval SET (__LOCK__ is valid) or RESET (__LOCK__ is invalid)
  324. */
  325. #define IS_OTFDEC_REGION_CONFIG_LOCK(__LOCK__) (((__LOCK__) == OTFDEC_REG_CONFIGR_LOCK_DISABLE) || \
  326. ((__LOCK__) == OTFDEC_REG_CONFIGR_LOCK_ENABLE) )
  327. /**
  328. * @brief Verify the OTFDEC region operating mode.
  329. * @param __MODE__ OTFDEC region operating mode parameter.
  330. * @retval SET (__MODE__ is valid) or RESET (__MODE__ is invalid)
  331. */
  332. #define IS_OTFDEC_REGION_OPERATING_MODE(__MODE__) (((__MODE__) == OTFDEC_REG_MODE_INSTRUCTION_ACCESSES_ONLY) || \
  333. ((__MODE__) == OTFDEC_REG_MODE_DATA_ACCESSES_ONLY) || \
  334. ((__MODE__) == OTFDEC_REG_MODE_INSTRUCTION_OR_DATA_ACCESSES) || \
  335. ((__MODE__) == OTFDEC_REG_MODE_INSTRUCTION_ACCESSES_ONLY_WITH_CIPHER))
  336. /**
  337. * @brief Verify the OTFDEC region index.
  338. * @param __INDEX__ OTFDEC region index
  339. * @retval SET (__INDEX__ is valid) or RESET (__INDEX__ is invalid)
  340. */
  341. #define IS_OTFDEC_REGIONINDEX(__INDEX__) (((__INDEX__) == OTFDEC_REGION1) || \
  342. ((__INDEX__) == OTFDEC_REGION2) || \
  343. ((__INDEX__) == OTFDEC_REGION3) || \
  344. ((__INDEX__) == OTFDEC_REGION4) )
  345. /**
  346. * @brief Verify the OTFDEC configuration attributes.
  347. * @param __ATTRIBUTE__ OTFDEC region index
  348. * @retval SET (__ATTRIBUTE__ is valid) or RESET (__ATTRIBUTE__ is invalid)
  349. */
  350. #define IS_OTFDEC_ATTRIBUTE(__ATTRIBUTE__) (((__ATTRIBUTE__) == OTFDEC_ATTRIBUTE_PRIV) || \
  351. ((__ATTRIBUTE__) == OTFDEC_ATTRIBUTE_NPRIV) )
  352. /**
  353. * @}
  354. */
  355. /* Private functions ---------------------------------------------------------*/
  356. /** @defgroup OTFDEC_Private_Functions OTFDEC Private Functions
  357. * @{
  358. */
  359. /**
  360. * @}
  361. */
  362. /**
  363. * @}
  364. */
  365. /**
  366. * @}
  367. */
  368. #endif /* OTFDEC1 */
  369. #ifdef __cplusplus
  370. }
  371. #endif
  372. #endif /* __STM32H7xx_HAL_OTFDEC_H */
  373. /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/