crc8.c 563 B

123456789101112131415161718192021222324252627282930313233343536
  1. // SPDX-License-Identifier: GPL-2.0+
  2. /*
  3. * Copyright (c) 2013 Google, Inc
  4. */
  5. #ifdef USE_HOSTCC
  6. #include <arpa/inet.h>
  7. #else
  8. #include <common.h>
  9. #endif
  10. #include <u-boot/crc.h>
  11. #define POLY (0x1070U << 3)
  12. static unsigned char _crc8(unsigned short data)
  13. {
  14. int i;
  15. for (i = 0; i < 8; i++) {
  16. if (data & 0x8000)
  17. data = data ^ POLY;
  18. data = data << 1;
  19. }
  20. return (unsigned char)(data >> 8);
  21. }
  22. unsigned int crc8(unsigned int crc, const unsigned char *vptr, int len)
  23. {
  24. int i;
  25. for (i = 0; i < len; i++)
  26. crc = _crc8((crc ^ vptr[i]) << 8);
  27. return crc;
  28. }