yaffs_ecc.h 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. /*
  2. * YAFFS: Yet another Flash File System . A NAND-flash specific file system.
  3. *
  4. * Copyright (C) 2002-2007 Aleph One Ltd.
  5. * for Toby Churchill Ltd and Brightstar Engineering
  6. *
  7. * Created by Charles Manning <charles@aleph1.co.uk>
  8. *
  9. * This program is free software; you can redistribute it and/or modify
  10. * it under the terms of the GNU Lesser General Public License version 2.1 as
  11. * published by the Free Software Foundation.
  12. *
  13. * Note: Only YAFFS headers are LGPL, YAFFS C code is covered by GPL.
  14. */
  15. /*
  16. * This code implements the ECC algorithm used in SmartMedia.
  17. *
  18. * The ECC comprises 22 bits of parity information and is stuffed into 3 bytes.
  19. * The two unused bit are set to 1.
  20. * The ECC can correct single bit errors in a 256-byte page of data. Thus, two such ECC
  21. * blocks are used on a 512-byte NAND page.
  22. *
  23. */
  24. #ifndef __YAFFS_ECC_H__
  25. #define __YAFFS_ECC_H__
  26. typedef struct {
  27. unsigned char colParity;
  28. unsigned lineParity;
  29. unsigned lineParityPrime;
  30. } yaffs_ECCOther;
  31. void yaffs_ECCCalculate(const unsigned char *data, unsigned char *ecc);
  32. int yaffs_ECCCorrect(unsigned char *data, unsigned char *read_ecc,
  33. const unsigned char *test_ecc);
  34. void yaffs_ECCCalculateOther(const unsigned char *data, unsigned nBytes,
  35. yaffs_ECCOther * ecc);
  36. int yaffs_ECCCorrectOther(unsigned char *data, unsigned nBytes,
  37. yaffs_ECCOther * read_ecc,
  38. const yaffs_ECCOther * test_ecc);
  39. #endif