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-2011 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.
  21. * Thus, two such ECC blocks are used on a 512-byte NAND page.
  22. *
  23. */
  24. #ifndef __YAFFS_ECC_H__
  25. #define __YAFFS_ECC_H__
  26. struct yaffs_ecc_other {
  27. unsigned char col_parity;
  28. unsigned line_parity;
  29. unsigned line_parity_prime;
  30. };
  31. void yaffs_ecc_calc(const unsigned char *data, unsigned char *ecc);
  32. int yaffs_ecc_correct(unsigned char *data, unsigned char *read_ecc,
  33. const unsigned char *test_ecc);
  34. void yaffs_ecc_calc_other(const unsigned char *data, unsigned n_bytes,
  35. struct yaffs_ecc_other *ecc);
  36. int yaffs_ecc_correct_other(unsigned char *data, unsigned n_bytes,
  37. struct yaffs_ecc_other *read_ecc,
  38. const struct yaffs_ecc_other *test_ecc);
  39. #endif