yaffs_packedtags1.c 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  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 General Public License version 2 as
  11. * published by the Free Software Foundation.
  12. */
  13. #include "yaffs_packedtags1.h"
  14. #include "yportenv.h"
  15. static const u8 all_ff[20] = {
  16. 0xff, 0xff, 0xff, 0xff,
  17. 0xff, 0xff, 0xff, 0xff,
  18. 0xff, 0xff, 0xff, 0xff,
  19. 0xff, 0xff, 0xff, 0xff,
  20. 0xff, 0xff, 0xff, 0xff
  21. };
  22. void yaffs_pack_tags1(struct yaffs_packed_tags1 *pt,
  23. const struct yaffs_ext_tags *t)
  24. {
  25. pt->chunk_id = t->chunk_id;
  26. pt->serial_number = t->serial_number;
  27. pt->n_bytes = t->n_bytes;
  28. pt->obj_id = t->obj_id;
  29. pt->ecc = 0;
  30. pt->deleted = (t->is_deleted) ? 0 : 1;
  31. pt->unused_stuff = 0;
  32. pt->should_be_ff = 0xffffffff;
  33. }
  34. void yaffs_unpack_tags1(struct yaffs_ext_tags *t,
  35. const struct yaffs_packed_tags1 *pt)
  36. {
  37. if (memcmp(all_ff, pt, sizeof(struct yaffs_packed_tags1))) {
  38. t->block_bad = 0;
  39. if (pt->should_be_ff != 0xffffffff)
  40. t->block_bad = 1;
  41. t->chunk_used = 1;
  42. t->obj_id = pt->obj_id;
  43. t->chunk_id = pt->chunk_id;
  44. t->n_bytes = pt->n_bytes;
  45. t->ecc_result = YAFFS_ECC_RESULT_NO_ERROR;
  46. t->is_deleted = (pt->deleted) ? 0 : 1;
  47. t->serial_number = pt->serial_number;
  48. } else {
  49. memset(t, 0, sizeof(struct yaffs_ext_tags));
  50. }
  51. }