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.
 
 
 
 
 
 

68 lines
1.7 KiB

  1. #ifndef PLSR_PERSISTENCE_H
  2. #define PLSR_PERSISTENCE_H
  3. #include "plsr_address_map.h"
  4. #include <stdint.h>
  5. #ifdef __cplusplus
  6. extern "C" {
  7. #endif
  8. /* HSD 检查点元数据位(随 HSD 记录一起掉电保存)。 */
  9. #define PLSR_HSD_META_POSITION_VALID (1UL << 0U)
  10. #define PLSR_HSD_META_LAST_BUSY (1UL << 1U)
  11. #define PLSR_HSD_META_REASON_MASK (0x0000003CUL)
  12. typedef struct
  13. {
  14. uint32_t metadata;
  15. uint16_t runtime[PLSR_HSD_RUNTIME_COUNT];
  16. uint16_t config[PLSR_HSD_CONFIG_COUNT];
  17. } PLSR_HSD_DATA;
  18. typedef struct
  19. {
  20. uint16_t config[PLSR_SFD_CONFIG_COUNT];
  21. } PLSR_SFD_DATA;
  22. typedef enum
  23. {
  24. PLSR_PERSISTENCE_OK = 0,
  25. PLSR_PERSISTENCE_DEFAULTED,
  26. PLSR_PERSISTENCE_INVALID_ARGUMENT,
  27. PLSR_PERSISTENCE_VERIFY_FAILED,
  28. PLSR_PERSISTENCE_NOT_IMPLEMENTED,
  29. PLSR_PERSISTENCE_ERASE_FAILED,
  30. PLSR_PERSISTENCE_PROGRAM_FAILED
  31. } PLSR_PERSISTENCE_RESULT;
  32. PLSR_PERSISTENCE_RESULT PlsrPersistenceLoadHsd(PLSR_HSD_DATA *data);
  33. PLSR_PERSISTENCE_RESULT PlsrPersistenceSaveHsd(const PLSR_HSD_DATA *data);
  34. void PlsrPersistenceResetHsd(void);
  35. PLSR_PERSISTENCE_RESULT PlsrPersistenceLoadSfd(PLSR_SFD_DATA *data);
  36. PLSR_PERSISTENCE_RESULT PlsrPersistenceSaveSfd(const PLSR_SFD_DATA *data);
  37. PLSR_PERSISTENCE_RESULT PlsrPersistenceEraseSfd(void);
  38. #ifdef PLSR_HOST_TEST
  39. typedef enum
  40. {
  41. PLSR_TEST_SFD_FAULT_NONE = 0,
  42. PLSR_TEST_SFD_FAULT_ERASE,
  43. PLSR_TEST_SFD_FAULT_PROGRAM,
  44. PLSR_TEST_SFD_FAULT_VERIFY,
  45. PLSR_TEST_SFD_FAULT_BEFORE_COMMIT
  46. } PLSR_TEST_SFD_FAULT;
  47. void PlsrPersistenceTestResetStorage(void);
  48. void PlsrPersistenceTestCorruptNewestHsd(void);
  49. void PlsrPersistenceTestCorruptNewestSfd(void);
  50. void PlsrPersistenceTestSetSfdFault(PLSR_TEST_SFD_FAULT fault);
  51. #endif
  52. #ifdef __cplusplus
  53. }
  54. #endif
  55. #endif /* PLSR_PERSISTENCE_H */