modules: littlefs copy the naive crc function from LittleFS
LittleFS requires a `lfs_crc()` function, however the basic crc function provided by LittleFS gets disabled when a custom configuration header is used. To ensure identical crc behavior let Zephyr have a copy of the basic lfs_crc. This allows to ensure identical behavior when moving glue code into Zephyr repo, and allow us to change to an existing crc implementation provided natively by Zephyr at a later time. Signed-off-by: Torsten Rasmussen <Torsten.Rasmussen@nordicsemi.no>
This commit is contained in:
parent
7c690b943f
commit
6b56b3c14e
31
modules/littlefs/zephyr_lfs_crc.c
Normal file
31
modules/littlefs/zephyr_lfs_crc.c
Normal file
|
@ -0,0 +1,31 @@
|
|||
/*
|
||||
* lfs util functions
|
||||
*
|
||||
* Copyright (c) 2017, Arm Limited. All rights reserved.
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
#include "lfs_util.h"
|
||||
|
||||
/* Use the LFS naive CRC implementation until it has been decided which CRC to
|
||||
* use for LittleFS.
|
||||
*/
|
||||
|
||||
/* Software CRC implementation with small lookup table */
|
||||
uint32_t lfs_crc(uint32_t crc, const void *buffer, size_t size)
|
||||
{
|
||||
static const uint32_t rtable[16] = {
|
||||
0x00000000, 0x1db71064, 0x3b6e20c8, 0x26d930ac,
|
||||
0x76dc4190, 0x6b6b51f4, 0x4db26158, 0x5005713c,
|
||||
0xedb88320, 0xf00f9344, 0xd6d6a3e8, 0xcb61b38c,
|
||||
0x9b64c2b0, 0x86d3d2d4, 0xa00ae278, 0xbdbdf21c,
|
||||
};
|
||||
|
||||
const uint8_t *data = buffer;
|
||||
|
||||
for (size_t i = 0; i < size; i++) {
|
||||
crc = (crc >> 4) ^ rtable[(crc ^ (data[i] >> 0)) & 0xf];
|
||||
crc = (crc >> 4) ^ rtable[(crc ^ (data[i] >> 4)) & 0xf];
|
||||
}
|
||||
|
||||
return crc;
|
||||
}
|
Loading…
Reference in a new issue