lfs_util.c 1.2 KB

123456789101112131415161718192021222324252627282930313233343536
  1. /*
  2. * lfs util functions
  3. *
  4. * Copyright (c) 2017 ARM Limited
  5. *
  6. * Licensed under the Apache License, Version 2.0 (the "License");
  7. * you may not use this file except in compliance with the License.
  8. * You may obtain a copy of the License at
  9. *
  10. * http://www.apache.org/licenses/LICENSE-2.0
  11. *
  12. * Unless required by applicable law or agreed to in writing, software
  13. * distributed under the License is distributed on an "AS IS" BASIS,
  14. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  15. * See the License for the specific language governing permissions and
  16. * limitations under the License.
  17. */
  18. #include "lfs_util.h"
  19. void lfs_crc(uint32_t *restrict crc, const void *buffer, size_t size) {
  20. static const uint32_t rtable[16] = {
  21. 0x00000000, 0x1db71064, 0x3b6e20c8, 0x26d930ac,
  22. 0x76dc4190, 0x6b6b51f4, 0x4db26158, 0x5005713c,
  23. 0xedb88320, 0xf00f9344, 0xd6d6a3e8, 0xcb61b38c,
  24. 0x9b64c2b0, 0x86d3d2d4, 0xa00ae278, 0xbdbdf21c,
  25. };
  26. const uint8_t *data = buffer;
  27. for (size_t i = 0; i < size; i++) {
  28. *crc = (*crc >> 4) ^ rtable[(*crc ^ (data[i] >> 0)) & 0xf];
  29. *crc = (*crc >> 4) ^ rtable[(*crc ^ (data[i] >> 4)) & 0xf];
  30. }
  31. }