|
ChibiOS/HAL 9.0.0
|
Managed Flash Storage Driver. More...
Managed Flash Storage Driver.
This module implements a managed flash storage able to store a finite number of variable-size records. Records are retrieved by their index number.
The driver is automatically performs:

Configuration options | |
| #define | MFS_CFG_MAX_RECORDS 32 |
| Maximum number of indexed records in the managed storage. | |
| #define | MFS_CFG_MAX_REPAIR_ATTEMPTS 3 |
| Maximum number of repair attempts on partition mount. | |
| #define | MFS_CFG_WRITE_VERIFY TRUE |
| Verify written data. | |
| #define | MFS_CFG_STRONG_CHECKING TRUE |
| Enables a stronger and slower check procedure on mount. | |
| #define | MFS_CFG_BUFFER_SIZE 32 |
| Size of the buffer used for data copying. | |
| #define | MFS_CFG_MEMORY_ALIGNMENT 2 |
| Enforced memory alignment. | |
| #define | MFS_CFG_TRANSACTION_MAX 16 |
| Maximum number of objects writable in a single transaction. | |
Error codes handling macros | |
| #define | MFS_IS_ERROR(err) |
| #define | MFS_IS_WARNING(err) |
Alignment macros | |
| #define | MFS_ALIGN_MASK ((uint32_t)MFS_CFG_MEMORY_ALIGNMENT - 1U) |
| #define | MFS_IS_ALIGNED(v) |
| #define | MFS_ALIGN_PREV(v) |
| #define | MFS_ALIGN_NEXT(v) |
Data Structures | |
| union | mfs_bank_header_t |
| Type of a bank header. More... | |
| union | mfs_data_header_t |
| Type of a data block header. More... | |
| struct | mfs_record_descriptor_t |
| struct | MFSConfig |
| Type of a MFS configuration structure. More... | |
| struct | mfs_transaction_op_t |
| Type of a buffered write/erase operation within a transaction. More... | |
| union | mfs_nocache_buffer |
| Type of an non-cacheable MFS buffer. More... | |
| struct | MFSDriver |
| Type of an MFS instance. More... | |
Macros | |
| #define | ALIGNED_REC_SIZE(n) |
| Data record size aligned. | |
| #define | ALIGNED_DHDR_SIZE ALIGNED_REC_SIZE(0) |
| Data record header size aligned. | |
| #define | ALIGNED_SIZEOF(t) |
| Aligned size of a type. | |
| #define | PAIR(a, b) |
| Combines two values (0..3) in one (0..15). | |
| #define | RET_ON_ERROR(err) |
| Error check helper. | |
| #define | MFS_BANK_MAGIC_1 0xEC705ADEU |
| #define | MFS_BANK_MAGIC_2 0xF0339CC5U |
| #define | MFS_HEADER_MAGIC_1 0x5FAE45F0U |
| #define | MFS_HEADER_MAGIC_2 0xF045AE5FU |
Typedefs | |
| typedef uint32_t | mfs_id_t |
| Type of a record identifier. | |
| typedef union mfs_nocache_buffer | mfs_nocache_buffer_t |
| Type of an non-cacheable MFS buffer. | |
Enumerations | |
| enum | mfs_bank_t { MFS_BANK_0 = 0 , MFS_BANK_1 = 1 } |
| Type of a flash bank. More... | |
| enum | mfs_state_t { MFS_UNINIT = 0 , MFS_STOP = 1 , MFS_READY = 2 , MFS_TRANSACTION = 3 , MFS_ERROR = 4 } |
| Type of driver state machine states. More... | |
| enum | mfs_error_t { MFS_NO_ERROR = 0 , MFS_WARN_REPAIR = 1 , MFS_WARN_GC = 2 , MFS_ERR_INV_STATE = -1 , MFS_ERR_INV_SIZE = -2 , MFS_ERR_NOT_FOUND = -3 , MFS_ERR_OUT_OF_MEM = -4 , MFS_ERR_TRANSACTION_NUM = -5 , MFS_ERR_TRANSACTION_SIZE = -6 , MFS_ERR_NOT_ERASED = -7 , MFS_ERR_FLASH_FAILURE = -8 , MFS_ERR_INTERNAL = -9 } |
| Type of an MFS error code. More... | |
| enum | mfs_bank_state_t { MFS_BANK_ERASED = 0 , MFS_BANK_OK = 1 , MFS_BANK_GARBAGE = 2 } |
| Type of a bank state assessment. More... | |
Functions | |
| uint16_t | crc16 (uint16_t crc, const uint8_t *data, size_t n) |
| static void | mfs_state_reset (MFSDriver *mfsp) |
| static flash_offset_t | mfs_flash_get_bank_offset (MFSDriver *mfsp, mfs_bank_t bank) |
| static mfs_error_t | mfs_flash_read (MFSDriver *mfsp, flash_offset_t offset, size_t n, uint8_t *rp) |
| Flash read. | |
| static mfs_error_t | mfs_flash_write (MFSDriver *mfsp, flash_offset_t offset, size_t n, const uint8_t *wp) |
| Flash write. | |
| static mfs_error_t | mfs_flash_copy (MFSDriver *mfsp, flash_offset_t doffset, flash_offset_t soffset, uint32_t n) |
| Flash copy. | |
| static mfs_error_t | mfs_bank_erase (MFSDriver *mfsp, mfs_bank_t bank) |
| Erases and verifies all sectors belonging to a bank. | |
| static mfs_error_t | mfs_bank_verify_erase (MFSDriver *mfsp, mfs_bank_t bank) |
| Erases and verifies all sectors belonging to a bank. | |
| static mfs_error_t | mfs_bank_write_header (MFSDriver *mfsp, mfs_bank_t bank, uint32_t cnt) |
| Writes the validation header in a bank. | |
| static mfs_bank_state_t | mfs_bank_check_header (MFSDriver *mfsp) |
| Checks integrity of the header in the shared buffer. | |
| static mfs_error_t | mfs_bank_scan_records (MFSDriver *mfsp, mfs_bank_t bank, bool *wflagp) |
| Scans blocks searching for records. | |
| static mfs_error_t | mfs_bank_get_state (MFSDriver *mfsp, mfs_bank_t bank, mfs_bank_state_t *statep, uint32_t *cntp) |
| Determines the state of a bank. | |
| static mfs_error_t | mfs_garbage_collect (MFSDriver *mfsp) |
| Enforces a garbage collection. | |
| static mfs_error_t | mfs_try_mount (MFSDriver *mfsp) |
| Performs a flash partition mount attempt. | |
| mfs_error_t | mfs_mount (MFSDriver *mfsp) |
| Configures and activates a MFS driver. | |
| void | mfsObjectInit (MFSDriver *mfsp, mfs_nocache_buffer_t *ncbuf) |
| Initializes an instance. | |
| mfs_error_t | mfsStart (MFSDriver *mfsp, const MFSConfig *config) |
| Configures and activates a MFS driver. | |
| void | mfsStop (MFSDriver *mfsp) |
| Deactivates a MFS driver. | |
| mfs_error_t | mfsErase (MFSDriver *mfsp) |
| Destroys the state of the managed storage by erasing the flash. | |
| mfs_error_t | mfsReadRecord (MFSDriver *mfsp, mfs_id_t id, size_t *np, uint8_t *buffer) |
| Retrieves and reads a data record. | |
| mfs_error_t | mfsWriteRecord (MFSDriver *mfsp, mfs_id_t id, size_t n, const uint8_t *buffer) |
| Creates or updates a data record. | |
| mfs_error_t | mfsEraseRecord (MFSDriver *mfsp, mfs_id_t id) |
| Erases a data record. | |
| mfs_error_t | mfsPerformGarbageCollection (MFSDriver *mfsp) |
| Enforces a garbage collection operation. | |
| mfs_error_t | mfsStartTransaction (MFSDriver *mfsp, size_t size) |
| Puts the driver in transaction mode. | |
| mfs_error_t | mfsCommitTransaction (MFSDriver *mfsp) |
| A transaction is committed and finalized atomically. | |
| mfs_error_t | mfsRollbackTransaction (MFSDriver *mfsp) |
| A transaction is rolled back atomically. | |
Variables | |
| static const uint16_t | crc16_table [256] |
| #define ALIGNED_REC_SIZE | ( | n | ) |
Data record size aligned.
Definition at line 50 of file hal_mfs.c.
Referenced by mfs_bank_scan_records(), mfs_garbage_collect(), mfs_try_mount(), mfsCommitTransaction(), mfsEraseRecord(), and mfsWriteRecord().
| #define ALIGNED_DHDR_SIZE ALIGNED_REC_SIZE(0) |
Data record header size aligned.
Definition at line 56 of file hal_mfs.c.
Referenced by mfs_bank_scan_records(), mfsEraseRecord(), mfsStartTransaction(), and mfsWriteRecord().
| #define ALIGNED_SIZEOF | ( | t | ) |
Aligned size of a type.
Definition at line 62 of file hal_mfs.c.
Referenced by mfs_bank_scan_records(), mfs_garbage_collect(), and mfs_try_mount().
| #define PAIR | ( | a, | |
| b ) |
Combines two values (0..3) in one (0..15).
Definition at line 68 of file hal_mfs.c.
Referenced by mfs_try_mount().
| #define RET_ON_ERROR | ( | err | ) |
Error check helper.
Definition at line 73 of file hal_mfs.c.
Referenced by mfs_bank_get_state(), mfs_bank_scan_records(), mfs_flash_copy(), mfs_flash_write(), mfs_garbage_collect(), mfs_try_mount(), mfsCommitTransaction(), mfsErase(), mfsEraseRecord(), mfsReadRecord(), mfsStartTransaction(), and mfsWriteRecord().
| #define MFS_BANK_MAGIC_1 0xEC705ADEU |
Definition at line 37 of file hal_mfs.h.
Referenced by mfs_bank_check_header(), and mfs_bank_write_header().
| #define MFS_BANK_MAGIC_2 0xF0339CC5U |
Definition at line 38 of file hal_mfs.h.
Referenced by mfs_bank_check_header(), and mfs_bank_write_header().
| #define MFS_HEADER_MAGIC_1 0x5FAE45F0U |
Definition at line 39 of file hal_mfs.h.
Referenced by mfs_bank_scan_records(), mfsCommitTransaction(), mfsEraseRecord(), and mfsWriteRecord().
| #define MFS_HEADER_MAGIC_2 0xF045AE5FU |
Definition at line 40 of file hal_mfs.h.
Referenced by mfs_bank_scan_records(), mfsCommitTransaction(), mfsEraseRecord(), and mfsWriteRecord().
| #define MFS_CFG_MAX_RECORDS 32 |
Maximum number of indexed records in the managed storage.
MFS_CFG_MAX_RECORDS. Definition at line 55 of file hal_mfs.h.
Referenced by mfs_bank_scan_records(), mfs_garbage_collect(), mfs_state_reset(), mfs_try_mount(), mfsEraseRecord(), mfsReadRecord(), and mfsWriteRecord().
| #define MFS_CFG_MAX_REPAIR_ATTEMPTS 3 |
Maximum number of repair attempts on partition mount.
Definition at line 62 of file hal_mfs.h.
Referenced by mfs_mount().
| #define MFS_CFG_STRONG_CHECKING TRUE |
| #define MFS_CFG_BUFFER_SIZE 32 |
Size of the buffer used for data copying.
Definition at line 90 of file hal_mfs.h.
Referenced by mfs_bank_scan_records(), mfs_flash_copy(), and mfs_flash_write().
| #define MFS_CFG_MEMORY_ALIGNMENT 2 |
| #define MFS_CFG_TRANSACTION_MAX 16 |
Maximum number of objects writable in a single transaction.
Definition at line 108 of file hal_mfs.h.
Referenced by mfsEraseRecord(), and mfsWriteRecord().
| #define MFS_IS_ERROR | ( | err | ) |
| #define MFS_IS_WARNING | ( | err | ) |
| #define MFS_ALIGN_MASK ((uint32_t)MFS_CFG_MEMORY_ALIGNMENT - 1U) |
| #define MFS_IS_ALIGNED | ( | v | ) |
| #define MFS_ALIGN_PREV | ( | v | ) |
| #define MFS_ALIGN_NEXT | ( | v | ) |
Definition at line 423 of file hal_mfs.h.
Referenced by mfsStartTransaction().
| typedef union mfs_nocache_buffer mfs_nocache_buffer_t |
Type of an non-cacheable MFS buffer.
| enum mfs_bank_t |
| enum mfs_state_t |
| enum mfs_error_t |
Type of an MFS error code.
| enum mfs_bank_state_t |
| uint16_t crc16 | ( | uint16_t | crc, |
| const uint8_t * | data, | ||
| size_t | n ) |
Definition at line 127 of file hal_mfs.c.
References crc16_table.
Referenced by mfs_bank_check_header(), mfs_bank_scan_records(), mfs_bank_write_header(), mfsReadRecord(), and mfsWriteRecord().
|
static |
Definition at line 138 of file hal_mfs.c.
References MFSDriver::current_bank, MFSDriver::current_counter, MFSDriver::descriptors, MFS_BANK_0, MFS_CFG_MAX_RECORDS, MFSDriver::next_offset, mfs_record_descriptor_t::offset, mfs_record_descriptor_t::size, and MFSDriver::used_space.
Referenced by mfs_mount(), and mfs_try_mount().
|
static |
Definition at line 152 of file hal_mfs.c.
References MFSConfig::bank0_start, MFSConfig::bank1_start, MFSDriver::config, flashGetSectorOffset(), MFSConfig::flashp, and MFS_BANK_0.
Referenced by mfs_bank_get_state(), mfs_bank_scan_records(), mfs_garbage_collect(), mfs_try_mount(), mfsEraseRecord(), mfsStartTransaction(), and mfsWriteRecord().

|
static |
Flash read.
| [in] | mfsp | pointer to the MFSDriver object |
| [in] | offset | flash offset |
| [in] | n | number of bytes to be read |
| [out] | rp | pointer to the data buffer |
Definition at line 172 of file hal_mfs.c.
References MFSDriver::config, FLASH_NO_ERROR, MFSConfig::flashp, flashRead, MFS_ERR_FLASH_FAILURE, MFS_ERROR, MFS_NO_ERROR, and MFSDriver::state.
Referenced by mfs_bank_get_state(), mfs_bank_scan_records(), mfs_flash_copy(), mfs_flash_write(), mfs_try_mount(), and mfsReadRecord().
|
static |
Flash write.
MFS_CFG_WRITE_VERIFY is enabled then the flash is also read back for verification.| [in] | mfsp | pointer to the MFSDriver object |
| [in] | offset | flash offset |
| [in] | n | number of bytes to be written |
| [in] | wp | pointer to the data buffer |
Definition at line 198 of file hal_mfs.c.
References MFSDriver::config, mfs_nocache_buffer::data8, FLASH_NO_ERROR, MFSConfig::flashp, flashProgram, MFS_CFG_BUFFER_SIZE, MFS_ERR_FLASH_FAILURE, MFS_ERROR, mfs_flash_read(), MFS_NO_ERROR, MFSDriver::ncbuf, RET_ON_ERROR, and MFSDriver::state.
Referenced by mfs_bank_write_header(), mfs_flash_copy(), mfsCommitTransaction(), mfsEraseRecord(), and mfsWriteRecord().

|
static |
Flash copy.
MFS_CFG_WRITE_VERIFY is enabled then the flash is also read back for verification.| [in] | mfsp | pointer to the MFSDriver object |
| [in] | doffset | destination flash offset |
| [in] | soffset | source flash offset |
| [in] | n | number of bytes to be copied |
Definition at line 243 of file hal_mfs.c.
References mfs_nocache_buffer::data8, MFS_CFG_BUFFER_SIZE, mfs_flash_read(), mfs_flash_write(), MFS_NO_ERROR, MFSDriver::ncbuf, and RET_ON_ERROR.
Referenced by mfs_garbage_collect().

|
static |
Erases and verifies all sectors belonging to a bank.
| [in] | mfsp | pointer to the MFSDriver object |
| [in] | bank | bank to be erased |
Definition at line 279 of file hal_mfs.c.
References MFSConfig::bank0_sectors, MFSConfig::bank0_start, MFSConfig::bank1_sectors, MFSConfig::bank1_start, MFSDriver::config, FLASH_NO_ERROR, MFSConfig::flashp, flashStartEraseSector, flashVerifyErase, flashWaitErase(), MFS_BANK_0, MFS_ERR_FLASH_FAILURE, MFS_ERROR, MFS_NO_ERROR, and MFSDriver::state.
Referenced by mfs_garbage_collect(), mfs_try_mount(), and mfsErase().

|
static |
Erases and verifies all sectors belonging to a bank.
| [in] | mfsp | pointer to the MFSDriver object |
| [in] | bank | bank to be verified |
Definition at line 325 of file hal_mfs.c.
References MFSConfig::bank0_sectors, MFSConfig::bank0_start, MFSConfig::bank1_sectors, MFSConfig::bank1_start, MFSDriver::config, FLASH_ERROR_VERIFY, FLASH_NO_ERROR, MFSConfig::flashp, flashVerifyErase, MFS_BANK_0, MFS_ERR_FLASH_FAILURE, MFS_ERR_NOT_ERASED, MFS_ERROR, MFS_NO_ERROR, and MFSDriver::state.
Referenced by mfs_bank_get_state().
|
static |
Writes the validation header in a bank.
| [in] | mfsp | pointer to the MFSDriver object |
| [in] | bank | bank to be validated |
| [in] | cnt | value for the flash usage counter |
Definition at line 365 of file hal_mfs.c.
References MFSConfig::bank0_start, MFSConfig::bank1_start, mfs_nocache_buffer::bhdr, MFSDriver::config, mfs_bank_header_t::counter, mfs_bank_header_t::crc, crc16(), MFSConfig::erased, mfs_bank_header_t::fields, flashGetSectorOffset(), MFSConfig::flashp, mfs_bank_header_t::hdr8, mfs_bank_header_t::magic1, mfs_bank_header_t::magic2, MFS_BANK_0, MFS_BANK_MAGIC_1, MFS_BANK_MAGIC_2, mfs_flash_write(), MFSDriver::ncbuf, and mfs_bank_header_t::reserved1.
Referenced by mfs_garbage_collect(), and mfs_try_mount().

|
static |
Checks integrity of the header in the shared buffer.
| [in] | mfsp | pointer to the MFSDriver object |
Definition at line 399 of file hal_mfs.c.
References mfs_nocache_buffer::bhdr, MFSDriver::config, mfs_bank_header_t::counter, mfs_bank_header_t::crc, crc16(), MFSConfig::erased, mfs_bank_header_t::fields, mfs_bank_header_t::hdr32, mfs_bank_header_t::hdr8, mfs_bank_header_t::magic1, mfs_bank_header_t::magic2, MFS_BANK_ERASED, MFS_BANK_GARBAGE, MFS_BANK_MAGIC_1, MFS_BANK_MAGIC_2, MFS_BANK_OK, MFSDriver::ncbuf, and mfs_bank_header_t::reserved1.
Referenced by mfs_bank_get_state(), and mfs_try_mount().

|
static |
Scans blocks searching for records.
| [in] | mfsp | pointer to the MFSDriver object |
| [in] | bank | the bank identifier |
| [out] | wflagp | warning flag on anomalies |
Definition at line 439 of file hal_mfs.c.
References ALIGNED_DHDR_SIZE, ALIGNED_REC_SIZE, ALIGNED_SIZEOF, MFSConfig::bank_size, MFSDriver::config, mfs_data_header_t::crc, crc16(), mfs_nocache_buffer::data32, mfs_nocache_buffer::data8, MFSDriver::descriptors, mfs_nocache_buffer::dhdr, MFSConfig::erased, mfs_data_header_t::fields, mfs_data_header_t::id, mfs_data_header_t::magic1, mfs_data_header_t::magic2, MFS_CFG_BUFFER_SIZE, MFS_CFG_MAX_RECORDS, mfs_flash_get_bank_offset(), mfs_flash_read(), MFS_HEADER_MAGIC_1, MFS_HEADER_MAGIC_2, MFS_NO_ERROR, MFSDriver::ncbuf, MFSDriver::next_offset, mfs_record_descriptor_t::offset, RET_ON_ERROR, mfs_data_header_t::size, and mfs_record_descriptor_t::size.
Referenced by mfs_try_mount().

|
static |
Determines the state of a bank.
| [in] | mfsp | pointer to the MFSDriver object |
| [in] | bank | bank to be checked |
| [out] | statep | bank state, it can be:
|
| [out] | cntp | bank counter |
Definition at line 548 of file hal_mfs.c.
References mfs_nocache_buffer::bhdr, mfs_bank_header_t::counter, mfs_nocache_buffer::data8, mfs_bank_header_t::fields, mfs_bank_check_header(), MFS_BANK_ERASED, MFS_BANK_GARBAGE, mfs_bank_verify_erase(), MFS_ERR_NOT_ERASED, mfs_flash_get_bank_offset(), mfs_flash_read(), MFS_NO_ERROR, MFSDriver::ncbuf, and RET_ON_ERROR.
Referenced by mfs_try_mount().

|
static |
Enforces a garbage collection.
Storage data is compacted into a single bank.
| [out] | mfsp | pointer to the MFSDriver object |
Definition at line 586 of file hal_mfs.c.
References ALIGNED_REC_SIZE, ALIGNED_SIZEOF, MFSDriver::current_bank, MFSDriver::current_counter, MFSDriver::descriptors, MFS_BANK_0, MFS_BANK_1, mfs_bank_erase(), mfs_bank_write_header(), MFS_CFG_MAX_RECORDS, mfs_flash_copy(), mfs_flash_get_bank_offset(), MFS_NO_ERROR, MFSDriver::next_offset, mfs_record_descriptor_t::offset, RET_ON_ERROR, and mfs_record_descriptor_t::size.
Referenced by mfs_try_mount(), mfsEraseRecord(), mfsPerformGarbageCollection(), mfsRollbackTransaction(), mfsStartTransaction(), and mfsWriteRecord().

|
static |
Performs a flash partition mount attempt.
| [in] | mfsp | pointer to the MFSDriver object |
Definition at line 637 of file hal_mfs.c.
References ALIGNED_REC_SIZE, ALIGNED_SIZEOF, mfs_nocache_buffer::bhdr, mfs_bank_header_t::counter, MFSDriver::current_bank, MFSDriver::current_counter, mfs_nocache_buffer::data8, MFSDriver::descriptors, mfs_bank_header_t::fields, MFS_BANK_0, MFS_BANK_1, mfs_bank_check_header(), mfs_bank_erase(), MFS_BANK_ERASED, MFS_BANK_GARBAGE, mfs_bank_get_state(), MFS_BANK_OK, mfs_bank_scan_records(), mfs_bank_write_header(), MFS_CFG_MAX_RECORDS, MFS_ERR_INTERNAL, mfs_flash_get_bank_offset(), mfs_flash_read(), mfs_garbage_collect(), MFS_NO_ERROR, mfs_state_reset(), MFS_WARN_REPAIR, MFSDriver::ncbuf, mfs_record_descriptor_t::offset, PAIR, RET_ON_ERROR, mfs_record_descriptor_t::size, and MFSDriver::used_space.
Referenced by mfs_mount().

| mfs_error_t mfs_mount | ( | MFSDriver * | mfsp | ) |
Configures and activates a MFS driver.
| [in] | mfsp | pointer to the MFSDriver object |
| MFS_NO_ERROR | if the operation has been successfully completed. |
| MFS_WARN_GC | if the operation triggered a garbage collection. |
| MFS_ERR_FLASH_FAILURE | if the flash memory is unusable because HW failures. Makes the driver enter the MFS_ERROR state. |
| MFS_ERR_INTERNAL | if an internal logic failure is detected. |
Definition at line 784 of file hal_mfs.c.
References MFS_CFG_MAX_REPAIR_ATTEMPTS, MFS_ERR_FLASH_FAILURE, MFS_ERR_INTERNAL, MFS_ERROR, MFS_IS_ERROR, MFS_READY, mfs_state_reset(), mfs_try_mount(), and MFSDriver::state.
Referenced by mfsErase(), and mfsStart().

| void mfsObjectInit | ( | MFSDriver * | mfsp, |
| mfs_nocache_buffer_t * | ncbuf ) |
Initializes an instance.
| [out] | mfsp | pointer to the MFSDriver object |
| [in] | ncbuf | pointer to an mfs_nocache_buffer_t buffer structure |
Definition at line 824 of file hal_mfs.c.
References MFSDriver::config, MFS_STOP, MFSDriver::ncbuf, osalDbgCheck, and MFSDriver::state.
| mfs_error_t mfsStart | ( | MFSDriver * | mfsp, |
| const MFSConfig * | config ) |
Configures and activates a MFS driver.
| [in] | mfsp | pointer to the MFSDriver object |
| [in] | config | pointer to the configuration |
| MFS_NO_ERROR | if the operation has been completed. |
| MFS_WARN_GC | if the operation triggered a garbage collection. |
| MFS_ERR_FLASH_FAILURE | if the flash memory is unusable because HW failures. Makes the driver enter the MFS_ERROR state. |
| MFS_ERR_INTERNAL | if an internal logic failure is detected. |
Definition at line 850 of file hal_mfs.c.
References MFSDriver::config, MFS_ERROR, mfs_mount(), MFS_READY, MFS_STOP, osalDbgAssert, osalDbgCheck, and MFSDriver::state.

| void mfsStop | ( | MFSDriver * | mfsp | ) |
Deactivates a MFS driver.
| [in] | mfsp | pointer to the MFSDriver object |
Definition at line 869 of file hal_mfs.c.
References MFSDriver::config, MFS_ERROR, MFS_READY, MFS_STOP, osalDbgAssert, osalDbgCheck, and MFSDriver::state.
| mfs_error_t mfsErase | ( | MFSDriver * | mfsp | ) |
Destroys the state of the managed storage by erasing the flash.
| [in] | mfsp | pointer to the MFSDriver object |
| MFS_ERR_INV_STATE | if the driver is in not in MFS_READY state. |
| MFS_NO_ERROR | if the operation has been successfully completed. |
| MFS_ERR_FLASH_FAILURE | if the flash memory is unusable because HW failures. Makes the driver enter the MFS_ERROR state. |
| MFS_ERR_INTERNAL | if an internal logic failure is detected. |
Definition at line 895 of file hal_mfs.c.
References MFS_BANK_0, MFS_BANK_1, mfs_bank_erase(), MFS_ERR_INV_STATE, mfs_mount(), MFS_READY, osalDbgCheck, RET_ON_ERROR, and MFSDriver::state.

| mfs_error_t mfsReadRecord | ( | MFSDriver * | mfsp, |
| mfs_id_t | id, | ||
| size_t * | np, | ||
| uint8_t * | buffer ) |
Retrieves and reads a data record.
| [in] | mfsp | pointer to the MFSDriver object |
| [in] | id | record numeric identifier, the valid range is between 1 and MFS_CFG_MAX_RECORDS |
| [in,out] | np | on input is the maximum buffer size, on return it is the size of the data copied into the buffer |
| [out] | buffer | pointer to a buffer for record data |
| MFS_NO_ERROR | if the operation has been successfully completed. |
| MFS_ERR_INV_STATE | if the driver is in not in MFS_READY state. |
| MFS_ERR_INV_SIZE | if the passed buffer is not large enough to contain the record data. |
| MFS_ERR_NOT_FOUND | if the specified id does not exists. |
| MFS_ERR_FLASH_FAILURE | if the flash memory is unusable because HW failures. Makes the driver enter the MFS_ERROR state. |
| MFS_ERR_INTERNAL | if an internal logic failure is detected. |
Definition at line 933 of file hal_mfs.c.
References mfs_data_header_t::crc, crc16(), mfs_nocache_buffer::data8, MFSDriver::descriptors, mfs_nocache_buffer::dhdr, mfs_data_header_t::fields, MFS_CFG_MAX_RECORDS, MFS_ERR_FLASH_FAILURE, MFS_ERR_INV_SIZE, MFS_ERR_INV_STATE, MFS_ERR_NOT_FOUND, MFS_ERROR, mfs_flash_read(), MFS_NO_ERROR, MFS_READY, MFS_TRANSACTION, MFSDriver::ncbuf, mfs_record_descriptor_t::offset, osalDbgCheck, RET_ON_ERROR, mfs_record_descriptor_t::size, and MFSDriver::state.

| mfs_error_t mfsWriteRecord | ( | MFSDriver * | mfsp, |
| mfs_id_t | id, | ||
| size_t | n, | ||
| const uint8_t * | buffer ) |
Creates or updates a data record.
| [in] | mfsp | pointer to the MFSDriver object |
| [in] | id | record numeric identifier, the valid range is between 1 and MFS_CFG_MAX_RECORDS |
| [in] | n | size of data to be written, it cannot be zero |
| [in] | buffer | pointer to a buffer for record data |
| MFS_NO_ERROR | if the operation has been successfully completed. |
| MFS_WARN_GC | if the operation triggered a garbage collection. |
| MFS_ERR_INV_STATE | if the driver is in not in MFS_READY state. |
| MFS_ERR_OUT_OF_MEM | if there is not enough flash space for the operation. |
| MFS_ERR_TRANSACTION_NUM | if the transaction operations buffer space has been exceeded. |
| MFS_ERR_TRANSACTION_SIZE | if the transaction allocated space has been exceeded. |
| MFS_ERR_FLASH_FAILURE | if the flash memory is unusable because HW failures. Makes the driver enter the MFS_ERROR state. |
| MFS_ERR_INTERNAL | if an internal logic failure is detected. |
Definition at line 1006 of file hal_mfs.c.
References ALIGNED_DHDR_SIZE, ALIGNED_REC_SIZE, MFSConfig::bank_size, MFSDriver::config, mfs_data_header_t::crc, crc16(), MFSDriver::current_bank, mfs_nocache_buffer::data8, MFSDriver::descriptors, mfs_nocache_buffer::dhdr, mfs_data_header_t::fields, mfs_data_header_t::id, mfs_transaction_op_t::id, mfs_data_header_t::magic1, mfs_data_header_t::magic2, MFS_CFG_MAX_RECORDS, MFS_CFG_TRANSACTION_MAX, MFS_ERR_INV_STATE, MFS_ERR_OUT_OF_MEM, MFS_ERR_TRANSACTION_NUM, MFS_ERR_TRANSACTION_SIZE, mfs_flash_get_bank_offset(), mfs_flash_write(), mfs_garbage_collect(), MFS_HEADER_MAGIC_1, MFS_HEADER_MAGIC_2, MFS_NO_ERROR, MFS_READY, MFS_TRANSACTION, MFS_WARN_GC, MFSDriver::ncbuf, MFSDriver::next_offset, mfs_record_descriptor_t::offset, mfs_transaction_op_t::offset, osalDbgCheck, RET_ON_ERROR, mfs_data_header_t::size, mfs_record_descriptor_t::size, mfs_transaction_op_t::size, MFSDriver::state, MFSDriver::tr_limit_offet, MFSDriver::tr_next_offset, MFSDriver::tr_nops, MFSDriver::tr_ops, and MFSDriver::used_space.

| mfs_error_t mfsEraseRecord | ( | MFSDriver * | mfsp, |
| mfs_id_t | id ) |
Erases a data record.
| [in] | mfsp | pointer to the MFSDriver object |
| [in] | id | record numeric identifier, the valid range is between 1 and MFS_CFG_MAX_RECORDS |
| MFS_NO_ERROR | if the operation has been successfully completed. |
| MFS_WARN_GC | if the operation triggered a garbage collection. |
| MFS_ERR_INV_STATE | if the driver is in not in MFS_READY state. |
| MFS_ERR_OUT_OF_MEM | if there is not enough flash space for the operation. |
| MFS_ERR_TRANSACTION_NUM | if the transaction operations buffer space has been exceeded. |
| MFS_ERR_TRANSACTION_SIZE | if the transaction allocated space has been exceeded. |
| MFS_ERR_FLASH_FAILURE | if the flash memory is unusable because HW failures. Makes the driver enter the MFS_ERROR state. |
| MFS_ERR_INTERNAL | if an internal logic failure is detected. |
Definition at line 1155 of file hal_mfs.c.
References ALIGNED_DHDR_SIZE, ALIGNED_REC_SIZE, MFSConfig::bank_size, MFSDriver::config, mfs_data_header_t::crc, MFSDriver::current_bank, mfs_nocache_buffer::data8, MFSDriver::descriptors, mfs_nocache_buffer::dhdr, mfs_data_header_t::fields, mfs_data_header_t::id, mfs_transaction_op_t::id, mfs_data_header_t::magic1, mfs_data_header_t::magic2, MFS_CFG_MAX_RECORDS, MFS_CFG_TRANSACTION_MAX, MFS_ERR_INTERNAL, MFS_ERR_INV_STATE, MFS_ERR_NOT_FOUND, MFS_ERR_TRANSACTION_NUM, MFS_ERR_TRANSACTION_SIZE, mfs_flash_get_bank_offset(), mfs_flash_write(), mfs_garbage_collect(), MFS_HEADER_MAGIC_1, MFS_HEADER_MAGIC_2, MFS_NO_ERROR, MFS_READY, MFS_TRANSACTION, MFS_WARN_GC, MFSDriver::ncbuf, MFSDriver::next_offset, mfs_record_descriptor_t::offset, mfs_transaction_op_t::offset, osalDbgCheck, RET_ON_ERROR, mfs_data_header_t::size, mfs_record_descriptor_t::size, mfs_transaction_op_t::size, MFSDriver::state, MFSDriver::tr_limit_offet, MFSDriver::tr_next_offset, MFSDriver::tr_nops, MFSDriver::tr_ops, and MFSDriver::used_space.

| mfs_error_t mfsPerformGarbageCollection | ( | MFSDriver * | mfsp | ) |
Enforces a garbage collection operation.
Garbage collection involves: integrity check, optionally repairs, obsolete data removal, data compaction and a flash bank swap.
| [in] | mfsp | pointer to the MFSDriver object |
| MFS_NO_ERROR | if the operation has been successfully completed. |
| MFS_ERR_INV_STATE | if the driver is in not in MFS_READY state. |
| MFS_ERR_FLASH_FAILURE | if the flash memory is unusable because HW failures. Makes the driver enter the MFS_ERROR state. |
| MFS_ERR_INTERNAL | if an internal logic failure is detected. |
Definition at line 1279 of file hal_mfs.c.
References MFS_ERR_INV_STATE, mfs_garbage_collect(), MFS_READY, osalDbgCheck, and MFSDriver::state.

| mfs_error_t mfsStartTransaction | ( | MFSDriver * | mfsp, |
| size_t | size ) |
Puts the driver in transaction mode.
n and size are used to make an estimation of the space required for the transaction to succeed. Note that the estimated size must include also the extra space required by alignment enforcement option. If the estimated size is wrong (by defect) what could happen is that there is a failure in the middle of a transaction and a roll-back would be required. | [in] | mfsp | pointer to the MFSDriver object |
| [in] | size | estimated total size of written records in transaction, this includes, data, headers and alignment gaps |
| MFS_NO_ERROR | if the operation has been successfully completed. |
| MFS_ERR_INV_STATE | if the driver is in not in MFS_READY state. |
| MFS_ERR_FLASH_FAILURE | if the flash memory is unusable because HW failures. Makes the driver enter the MFS_ERROR state. |
| MFS_ERR_INTERNAL | if an internal logic failure is detected. |
Definition at line 1320 of file hal_mfs.c.
References ALIGNED_DHDR_SIZE, MFSConfig::bank_size, MFSDriver::config, MFSDriver::current_bank, MFS_ALIGN_NEXT, MFS_ERR_INV_STATE, MFS_ERR_OUT_OF_MEM, mfs_flash_get_bank_offset(), mfs_garbage_collect(), MFS_NO_ERROR, MFS_READY, MFS_TRANSACTION, MFSDriver::next_offset, osalDbgCheck, RET_ON_ERROR, MFSDriver::state, MFSDriver::tr_limit_offet, MFSDriver::tr_next_offset, MFSDriver::tr_nops, and MFSDriver::used_space.

| mfs_error_t mfsCommitTransaction | ( | MFSDriver * | mfsp | ) |
A transaction is committed and finalized atomically.
| [in] | mfsp | pointer to the MFSDriver object |
| MFS_NO_ERROR | if the operation has been successfully completed. |
| MFS_ERR_INV_STATE | if the driver is in not in MFS_TRANSACTION state. |
| MFS_ERR_FLASH_FAILURE | if the flash memory is unusable because HW failures. Makes the driver enter the MFS_ERROR state. |
| MFS_ERR_INTERNAL | if an internal logic failure is detected. |
Definition at line 1376 of file hal_mfs.c.
References ALIGNED_REC_SIZE, mfs_nocache_buffer::data8, MFSDriver::descriptors, mfs_nocache_buffer::dhdr, mfs_data_header_t::fields, mfs_transaction_op_t::id, mfs_data_header_t::magic1, mfs_data_header_t::magic2, MFS_ERR_INV_STATE, mfs_flash_write(), MFS_HEADER_MAGIC_1, MFS_HEADER_MAGIC_2, MFS_NO_ERROR, MFS_READY, MFS_TRANSACTION, MFSDriver::ncbuf, MFSDriver::next_offset, mfs_record_descriptor_t::offset, mfs_transaction_op_t::offset, osalDbgCheck, RET_ON_ERROR, mfs_record_descriptor_t::size, mfs_transaction_op_t::size, MFSDriver::state, MFSDriver::tr_next_offset, MFSDriver::tr_nops, MFSDriver::tr_ops, and MFSDriver::used_space.

| mfs_error_t mfsRollbackTransaction | ( | MFSDriver * | mfsp | ) |
A transaction is rolled back atomically.
This function performs a garbage collection in order to discard all written data that has not been finalized.
| [in] | mfsp | pointer to the MFSDriver object |
| MFS_NO_ERROR | if the operation has been successfully completed. |
| MFS_ERR_INV_STATE | if the driver is in not in MFS_TRANSACTION state. |
| MFS_ERR_FLASH_FAILURE | if the flash memory is unusable because HW failures. Makes the driver enter the MFS_ERROR state. |
| MFS_ERR_INTERNAL | if an internal logic failure is detected. |
Definition at line 1457 of file hal_mfs.c.
References MFS_ERR_INV_STATE, mfs_garbage_collect(), MFS_NO_ERROR, MFS_READY, MFS_TRANSACTION, osalDbgCheck, MFSDriver::state, and MFSDriver::tr_nops.
